思路:
dp + 排序
C o d e Code Code:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 10000
using namespace std;
struct node{
int p,t;
}task[MAXN+5];
bool cmp(node a,node b){return a.p<b.p;}
int f[MAXN+5],n,k;
int main()
{
scanf("%d%d",&n,&k);
for(int i = 1; i <= k; i++)
scanf("%d%d",&task[i].p,&task[i].t);
sort(task + 1, task + k + 1, cmp);
int j = k;
for(int i = n; i >= 1; i--)
{
if(i != task[j].p)
f[i] = f[i + 1] + 1;
else
{
while(i == task[j].p)
{
if(f[i] < f[task[j].p + task[j].t])//dp
f[i] = f[task[j].p + task[j].t];
j--;
}
}
}
printf("%d\n",f[1]);
return 0;
}