01背包就是有限次的装包,需要倒着装
#include<stdio.h>
#include<string.h>
int main()
{
int m,t,dp[],v,w;
while(~scanf("%d%d",&t,&m))
{
memset(dp,,sizeof(dp));
int i,j;
for(i=;i<m;i++)
{
scanf("%d%d",&v,&w);
for(j=t;j>=v;j--)
{
dp[j]=dp[j]>(dp[j-v]+w) ? dp[j] : dp[j-v]+w ;
}
}
printf("%d\n",dp[t]);
}
return ;
}
#include<stdio.h>
#include<string.h>
int main()
{
int n,v,dp[],c,w;
scanf("%d%d",&n,&v);
while(n&&v)
{
memset(dp,,sizeof(dp));
int i,j;
for(i=;i<n;i++)
{
scanf("%d%d",&c,&w);
for(j=v;j>=c;j--)
{
dp[j]=dp[j]>(dp[j-c]+w)?dp[j]:dp[j-c]+w;
}
}
printf("%d\n",dp[v]);
scanf("%d%d",&n,&v);
}
return ;
}