题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 1010
int N[maxn];
int V[maxn];
int T;
int n,v;
int dp[maxn][maxn];
void A(){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=0;j<=v;j++)
{
if(N[i]>j) dp[i][j]=dp[i-1][j];
else
{ if(N[i]<=j)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-N[i]]+V[i]);
}
}
}
}
int main()
{
// freopen("test","r",stdin);
cin>>T;
for(int i=0;i<T;i++)
{
cin>>n>>v;
for(int ii=1;ii<=n;ii++) cin>>V[ii];
for(int j=1;j<=n;j++) cin>>N[j];
A();
/* for(int m=0;m<=n;m++){
for(int jj=0;jj<=v;jj++)
cout<<dp[m][jj]<<' '; // 输出dp 数组
cout<<endl;
}
*/
cout<<dp[n][v]<<endl;
}
return 0;
}