原题链接:http://acm.hdu.edu.cn/status.php
题记:0/1背包问题。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
struct node{
int value;
int weight;
}bone[N];
int n,v;
int dp[N][N];
int ans(){
for(int i=1;i<=n;i++){
for(int j=0;j<=v;j++){
if(bone[i].weight>j)
dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i-1][j-bone[i].weight]+bone[i].value);
}
}
return dp[n][v];
}
int main(){
int t;
cin>>t;
while(t--){
memset(dp,0,sizeof(dp));
cin>>n>>v;
for(int i=1;i<=n;i++)cin>>bone[i].value;
for(int i=1;i<=n;i++)cin>>bone[i].weight;
cout<<ans()<<endl;
}
return 0;
}