//f[v]表示把前i件物品放入容量为v的背包里得到的价值。把i从1~n(n件)循环后,最后f[v]表示所求最大值。
#include<iostream>
using namespace std;
struct bone
{
int value;
int volume;
}b[1005];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int t,n,v,i,j,f[1001];
cin>>t;
while(t--)
{
scanf("%d%d",&n,&v);
for(i=0;i<n;i++)
scanf("%d",&b[i].value);
for(i=0;i<n;i++)
scanf("%d",&b[i].volume);
for(i=0;i<=v;i++)
f[i]=0;
for(i=0;i<n;i++)
for(j=v;j>=b[i].volume;j--)
f[j]=max(f[j],f[j-b[i].volume]+b[i].value);//能够理解意思就好,大概的能够推出来。
cout<<f[v]<<endl;
}
return 0;
}
HDU2602一维
最新推荐文章于 2021-05-21 15:47:43 发布