因为是个01背包,关于容量的循环要从后到前,如果是完全背包,那从前往后就可以了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int ans[1100],w[110],v[110];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(ans,0,sizeof(ans));
for(int i=1;i<=m;i++)
scanf("%d%d",&w[i],&v[i]);
for(int i=1;i<=m;i++)
for(int j=n;j>=1;j--)
{
if(j>=w[i])
ans[j]=max(ans[j],ans[j-w[i]]+v[i]);
}
printf("%d\n",ans[n]);
}
return 0;
}