01背包
#include<iostream>
using namespace std;
int max(int a, int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
int t, n, v,k, i;
int c[1000], w[1000];
int f[1000];
scanf("%d",&t);
while(t--)//表示测试的个数
{
memset(f,0,sizeof(f));
scanf("%d%d",&n,&v);//n件物品,容量为V
for(i = 0; i < n; i++)
scanf("%d",&c[i]);//第i件物品体积大小为c[i]
for(i = 0; i < n; i++)
scanf("%d",&w[i]);//第i件物品价值w[i]
for(i = 0; i < n; i++)
{
//f[k]容量为k的背包当前装入物品的最大价值,k < c[i] if k = 2 c[i] = 3 就是容量为2的背包不能装容量为3的物品,所以k要大于等于c[i]
for(k = v; k >= c[i]; k--)
f[k] = max(f[k], f[k-c[i]]+w[i]);//先算这里面最大的一个赋给f[k]
}
}
cout<<f[v]<<endl;
return 0;
}