您的位置:首页 > 其它

完全背包问题

2018-03-09 19:52 253 查看
一个背包总容量为V,现在有N个物品,第i个 物品体积为weight[i],价值为value[i],每个物品都有无限多件,现在往背包里面装东西,怎么装能使背包的内物品价值最大?

分析:

完全背包问题中,物品无限多件,只要背包没满,就可以一直添加

状态转移方程为:

f[i][j] = max(f[i-1][j-k*weight[i]] +k*value[i])   其中  0<=k<= v / weight[i]

当然 可以优化 使用一维数组

for i = 1......n

forj = 1.....m

f[j] = max(f[j],f[j-weight[i]] + value[i])

贴代码、

#include<bits/stdc++.h>
using namespace std;
int w[10],v[10],dp[105];
int main()
{
int m,n;//m为 容量 n为物品种类
cin >> m >> n;
for(int i = 1;i <= n;i ++)
cin >> w[i] >> v[i];

for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++)
if(j >= w[i])
dp[j] = max(dp[j],dp[j-w[i]] + v[i]);
}

cout << dp[m];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: