题目:
题解:
f[i]表示第i时刻的最短工作时间,最后用n-,逆序dp
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
bool vis[10005];
int p[10005],e[10005],f[10005],t[10005];
int main()
{
int n,k,i,j;
memset(vis,0,sizeof(vis));
scanf("%d%d",&n,&k);
for (i=1;i<=k;i++)
{scanf("%d%d",&p[i],&t[i]); e[i]=p[i]+t[i]; vis[p[i]]=1;}
for (i=n;i>=1;i--)//最短工作时间
if (vis[i])
{
f[i]=n+1;
for (j=1;j<=k;j++)
if (p[j]==i) f[i]=min(f[i],f[e[j]]+t[j]);
}
else f[i]=f[i+1];
printf("%d",n-f[1]);
}