01背包:每种物品仅有一件,可以选择放或不放。
一个旅行者有能装M公斤的背包,有N件物品重为:vo1,vo2……von,价值分别为va1,va2,……van。求放入背包最大总价值。
#include <cstdio>
#include <cstring>
int main()
{
int vo[1002],va[1002],c[1002],T,N,V,i,j;
scanf("%d",&T);
while(T--)
{
memset(c,0,sizeof(c));
scanf("%d%d",&N,&V);
for(i=1;i<=N;i++)
scanf("%d",va+i);
for(i=1;i<=N;i++)
scanf("%d",vo+i);
for(i=1;i<=N;i++)
for(j=V;j>=vo[i];j--)
if(c[j]<c[j-vo[i]]+va[i])
c[j]=c[j-vo[i]]+va[i];
printf("%d\n",c[V]);
}
return 0;
}