还好这个题目只是要求打印最大权值,利用一维数组就可以解决了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int v[1001],w[1001],f[1001];
int main()
{
int n;
int N,V;
int i,k;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&N,&V);
for(i=0;i<N;i++)
scanf("%d",&w[i]);
for(i=0;i<N;i++)
scanf("%d",&v[i]);
memset(f,0,sizeof(f));
for(i=0;i<N;i++)
{
for(k=V;k>=0;k--)
if(k>=v[i])
f[k]=f[k]>f[k-v[i]]+w[i]?f[k]:f[k-v[i]]+w[i];
}
printf("%d\n",f[V]);
}
return 0;
}