#include <iostream>
#include <algorithm>
using namespace std;
const int M =1010; // 决策 : 第i件取 或者不取
long vol[M],val[M],dp[M]; // dp[i][j]=max(dp[i-1][j],dp[i-1][j-vol[i]]+val[i])
int main() // 逆推 优化成一维
{
int t;
cin>>t;
while(t--)
{
int n,v;
cin>>n>>v;
for(int i=1;i<=n;i++)
{
cin>>val[i];
}
for(int i=1;i<=n;i++)
{
cin>>vol[i];
}
for(int j=0;j<=v;j++)
{
dp[j]=0; // 0件物品装在体积为j的收益为0
}
for(int i=1;i<=n;i++) // 前i件
{
for(int j=v;j>=0;j--) // 逆推
{
if(j>=vol[i])
{
dp[j]=max(dp[j],dp[j-vol[i]]+val[i]);//优化成一维 dp[j]:前i件 体积为j
}
else
{
dp[j]=dp[j];
}
}
}
cout<<dp[v]<<endl;
}
return 0;
}
hdu 2602 (01背包入门)
最新推荐文章于 2018-07-17 15:58:29 发布