#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[1003];
ll w[1003];
ll p[1003];
int main()
{
ll n,m,i,j,t;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%lld",&p[i]);
}
for(i=1;i<=n;i++)
{
scanf("%lld",&w[i]);
}
for(i=1;i<=n;i++)
{
for(j=m;j >= w[i];j--)
{
dp[j] = max(dp[j],dp[j-w[i]] + p[i]);
}
}
printf("%lld\n",dp[m]);
}
return 0;
}
本文介绍了一个使用C++实现的背包问题动态规划算法,通过输入物品的数量、背包的容量以及每个物品的价值和重量,动态规划算法能够求解在不超过背包容量的情况下,如何选择物品以使得总价值最大。该算法首先初始化动态规划数组,然后通过两层循环,从第一个物品开始,逐个考虑是否将当前物品放入背包中,更新动态规划数组以记录当前容量下能达到的最大价值。
249

被折叠的 条评论
为什么被折叠?



