状态转移方程 f[j]=max(f[j],f[j-w[i]]+v[i])。
代码如下:
#include<stdio.h>
#define MAX 10000010
long long t,m;
long long v[MAX],w[MAX],f[MAX];
long long int max(long long x,long long y)
{
return (x>y)?x:y;
}
int main()
{
long long int i,j;
scanf("%lld %lld",&t,&m);
for(i=1;i<=m;i++)
scanf("%lld %lld",&w[i],&v[i]);
for(i=1;i<=m;i++)
{
for(j=w[i];j<=t;j++)
{
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
printf("%lld",f[t]);
}