题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602
解释看注释把
#include<stdio.h>
#define max(a,b) ((a)>(b))?(a):(b)
int main(void)
{
int t,n,V;
int i,j,k;
int v[1009];
int w[1009];
int f[1009];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&V);
for(i = 1 ; i <= n ; i++)
{
scanf("%d",&w[i]);
}
for(i = 1 ; i <= n ; i++)
{
scanf("%d",&v[i]);
}
for(i = 0 ; i <1009 ; i++)
f[i] = 0; //袋子初始时是空的,所以初始为0
for(i = 1 ; i <= n ; i++)
{
for(j = V ; j >= v[i] ; j--)
{
f[j] = max(f[j],f[j-v[i]]+w[i]);//01背包
}
}
printf("%d\n",f[V]);
}
return 0;
}