[P1280]尼克的任务

来源:互联网 发布:剑三毒姐捏脸数据 编辑:程序博客网 时间:2024/04/30 22:13

原题链接

nico的任务
niconiconi

这个题的DP方程
对我来说还是有点难想的
因为如果当前有多个任务的话
需要根据任务的结束状态判断选择哪个
但是正推的话
还不知道结束后是什么状态
所以
DP[i]代表从i~n的最大空闲时间

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<cstdlib>#include<climits>#include<queue>#define LL long longusing namespace std;struct nico{    int p,t;}w[10005];int n,k,i,j,sum[10005],dp[10005],num;bool comp(nico a,nico b){    return a.p>b.p;}int main(){    scanf("%d%d",&n,&k);    for(i=1;i<=k;i++)    {        scanf("%d%d",&w[i].p,&w[i].t);        sum[w[i].p]++;    }    sort(w+1,w+k+1,comp);    for(i=n;i>=1;i--)    {        if(!sum[i]) dp[i]=dp[i+1]+1;        else            for(j=1;j<=sum[i];j++)            {                num++;                          dp[i]=max(dp[i],dp[i+w[num].t]);            }       }    printf("%d",dp[1]);    return 0;}