尼克的任务

来源:互联网 发布:淘宝有人工客服电话嘛 编辑:程序博客网 时间:2024/05/01 04:11

f[i]表示i-1以前的空暇时间最大

f[i+t]=max(f[i+t],f[i])

先从第一个时间开始做,然后看做哪一个的空暇短
需要付最小值,因为你不能从后面的时间开始,必须前面推到过才行

#include<cstdio>#include<iostream>#include<cstring>#include<vector>using namespace std;int ans,m,n,f[10509];vector <int>a[10999];int main(){    memset(f,128,sizeof f);    scanf("%d%d",&m,&n);    for(int i=1,x,y;i<=n;i++)     {        scanf("%d%d",&x,&y);        a[x].push_back(y);    }    f[1]=0;    for(int i=1;i<=m;i++)    {        if(a[i].size())        for(int j=0;j<a[i].size();j++){            f[i+a[i][j]]=max(f[i+a[i][j]],f[i]);        }        else  f[i+1]=max(f[i]+1,f[i+1]);    }    printf("%d",f[m+1]);} 
原创粉丝点击