P1280 尼克的任务

题意:给出尼克工作时间长度,给出k个任务

    给出每个任务开始的时间,给出每个任务持续的时间,同一时间只能接一个任务(任意选择),在此时间内的其他任务由其他人做即可

      求如何选择任务能让偷懒时间最长

思路:倒着推;  定义dp【i】,表示从i时刻到结束所能偷懒的最大时间

     于是,从n~1进行枚举

      假如遇到这个时间没有任务的,就+1;

      假如遇到有任务的,就枚举择优;

        最后dp【1】就是答案

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e4+10;
 4 int n,k,s,t;
 5 int dp[maxn];
 6 vector<int>v[maxn];
 7 int main(){
 8     scanf("%d%d",&n,&k);
 9     for(int i=1;i<=k;i++){
10         scanf("%d%d",&s,&t);
11         v[s].push_back(t);
12     }
13     for(int i=n;i>=1;--i){
14         if(v[i].size()>0)
15             for(int j=0;j<v[i].size();++j)
16                 dp[i]=max(dp[i],dp[i+v[i][j]]);
17         else dp[i]=dp[i+1]+1;            
18     }
19     printf("%d",dp[1]);
20 }
View Code

 

posted @ 2020-03-29 11:15  古比  阅读(152)  评论(0)    收藏  举报