首页 > 代码库 > 【洛谷1280】尼克的任务

【洛谷1280】尼克的任务

我们发现这道题是有后效性的……前面的决策会对后面的产生影响……

所以我们可以反向考虑

f [ i ] 表示第i分钟至第n分钟的最大空闲时间

理论上应该排个序,不过默认有序了……

转移方程:如果该时间有任务开始,f [ i ] = max( f [ i ],f [ i+e [ i ] ])

             如果没有任务,f [ i ]=f [ i+1] +1

技术分享
 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 int n,k,f[10001],b[10001],e[10001]; 6 int main(){ 7     int tmp; 8     memset(f,0,sizeof(f)); 9     scanf("%d %d",&n,&k);10     for (int i=1;i<=k;i++)11         scanf("%d %d",&b[i],&e[i]);12     for (int i=n;i>=1;i--){13         tmp=0;14         while (b[k]==i){15             f[i]=max(f[i],f[i+e[k]]);16             k--;tmp=1;17         }18         if (!tmp) f[i]=f[i+1]+1;19     }20     printf("%d",f[1]);21     return 0;22 }
STD

 

【洛谷1280】尼克的任务