骨头收集者
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct Bone{
int val, vol;
}bone[1005];
int dp[1005][1005];
int ans(int n, int v){
memset(dp, 0, sizeof(dp));
for(int i=1; i<=n; ++i){
for(int j=0; j<=v; ++j){ //这道题有骨头的体积为0,j从0开始
if(bone[i].vol<=j){
dp[i][j]=max(dp[i-1][j], dp[i-1][j-bone[i].vol]+bone[i].val); //dp
}
else{
dp[i][j]=dp[i-1][j];
}
}
}
return dp[n][v];
}
int main() {
int t=0, N=0, V=0;
cin >> t;
while(t--){
cin >> N >> V;
for(int i=1; i<=N; ++i){
cin >> bone[i].val;
}
for(int i=1; i<=N; ++i){
cin >> bone[i].vol;
}
cout << ans(N, V) <<endl;
}
return 0;
}