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 }