这个是最简单的0-1背包了,记住这个函数,以后在遇到这种题直接使用就行了。。。
#include<stdio.h>
#include<string.h>
#define MAX(a,b) (a>b?a:b)
int c[13000]; // 注意数组下标
void Zero_One(int cost, int weight, int m) // 0-1背包, 逆序
{
int i;
for(i=m;i>=cost;i--)
c[i]=MAX(c[i],c[i-cost]+weight);
}
int main()
{
int i,m,n;
int d[3500],w[3500];
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&d[i]);
memset(c,0,sizeof(c));
for(i=1;i<=n;i++){
Zero_One(w[i],d[i],m);
}
printf("%d\n",c[m]);
system("pause");
return 0;
}