栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

腾讯后台开发2020-视野争夺

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

腾讯后台开发2020-视野争夺

题目描述:

方法动态规划:

题目要求求能够覆盖[0,L]范围所用的最少守卫数,创建一个动态规划数组dp记录每个守卫覆盖的边界,dp[i][0]表示第i个守卫左侧覆盖的端点值,dp[i][1]表示第i个守卫右侧覆盖的端点值。

dp[i][0]: 如果xi >= dp[i][0] && yi <= dp[i][1] 表示此时守卫并没有扩展边界,则抛弃该守卫。否则更新更新dp数组边界。此时应判断是否覆盖对应范围,若覆盖则守卫不增加,否则守卫数增加。

另一种情况,xi < dpi][0] && yi > dp[i][0],此时说明第i个守卫可以覆盖之前所有守卫范围,则抛弃之前所有守卫,将手卫数置为1.

C++代码:

#include
#include
#include
using namespace std;

int lessnumberofguard(vector>& nums,int n,int l){
    vector> dp(n,vector(2,0));
    dp[0][0] = nums[0][0];
    dp[0][1] = nums[0][1];
    cout << dp[0][0] << " " << dp[0][1] << endl;
    int res = 1;
    for(int i=1;i= dp[i-1][0] && nums[i][1] <= dp[i-1][1]){
            continue;
        }else if(nums[i][0] < dp[i-1][0] && nums[i][1] <= dp[i-1][1]){
            if(dp[i][0] == 0 && dp[i][1] >= l){
                res++;
            }
            dp[i][0] = nums[i][0];
            dp[i][1] = dp[i-1][1];
        }else if(nums[i][0] >= dp[i-1][0] && nums[i][1] > dp[i-1][1]){
            if(dp[i][0] == 0 && dp[i][1] >= l){
                res++;
            }
            dp[i][0] = dp[i-1][0];
            dp[i][1] = nums[i][1];
        }else if(nums[i][0] < dp[i-1][0] && nums[i][1] > dp[i-1][1]){
            dp[i][0] = nums[i][0];
            dp[i][1] = nums[i][1];
            res = 1;
        }
    }
    return -1;
}
int main(){
    int n,l;
    cin >> n >> l;
    vector> nums(n,vector(2));
    for(int i=0;i> nums[i][0] >> nums[i][1];
    }
    int res = lessnumberofguard(nums,n,l);
    cout << res << endl;
    return 0;
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号