这道题是典型的简单背包问题,其他就不必多说。代码很简单。
#include<iostream>
#include<string>
#include<algorithm> //调用max函数。
using namespace std;
int f[1005];
int Wi[1005],Di[1005];
int main()
{
int n,m,i,v,t;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=0;i<n;i++)
cin>>Di[i];
for(i=0;i<n;i++)
cin>>Wi[i];
memset(f,0,sizeof(f));
for(i=0;i<n;i++) //从n个物品里选
for( v=m;v>=Wi[i];v--) //倒序,每次后一个状态,是由前一个推出来的 。
f[v]=max(f[v-Wi[i]]+Di[i],f[v]);
cout<<f[m]<<endl;
}
return 0;
}