背包问题总结第三讲——完全背包问题
2009-04-30 05:12
253 查看
字号:大 中 小
题目:
有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
基本思路:
方法有三种:
直接转换为O-1背包问题
虽然物品数量不限,但由于背包容量有限,故物品能装入的最大数量也受到限制,第i种物品最多可以装入n[i] = V/c[i]个,这样就有了两种思路,一是把第i种物品划分为n[i]个等费用等价值的独立物品,然后采用0-1背包的方程即可:
f[i][v] = max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
二是增加一个变量k对第i种物品加入的数量进行计数:
f[i][v] = max{f[i-1][v],f[i-1][v-k*c[i]]+k*w[i]}
采用二进制思想有限的组合物品
1、2、5分可以组合任意钱数x,那么把c[i]划分为只适合于自己的k个子集合,就可以大大减少物品数,从而在物品数量上对第一种方法进行优化。
策略:分成c[i]*2^(k-1)的物品,条件为c[i]*2^(k-1)<=V,外加c[i]*(n[i]-omi(k)),如13可以划分为1,2,4,6
方程是不变的,只是物品数量少了。
直接解
由于选择有后效性,故方程为:
f[i][v] = max{f[i-1][v],f[i][v-c[i]]+w[i]}
大师级无敌O(VN)方法
for i = 1..N
for v = 0..V
f[v] = max{f[v],f[v-cost]+weight}
由于方法太过巧妙,至今我都没有想明白,正在深入研究。 由直接解的方法一维数组实现得到。
相关文章推荐
- 背包问题总结第三讲——完全背包问题
- 背包问题总结(0-1背包+完全背包+多重背包)
- 完全背包问题总结
- 经典问题之01与完全背包总结
- 【转】背包问题总结(0-1背包+完全背包+多重背包)
- 背包问题总结(0-1背包+完全背包+多重背包)
- 背包问题小总结 习题(动态规划01背包(第k优解)完全背包,多重背包)acm杭电HDU2639,HDU2602,HDU1114,HDU2191
- 【转】背包问题总结(0-1背包+完全背包+多重背包)
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题九讲02-完全背包问题总结
- 背包问题总结(0-1背包+完全背包+多重背包)
- 背包问题总结(01背包、完全背包、多重背包)
- 背包问题(01背包,完全背包,多重背包)
- NYOJ 311 完全背包【背包问题】
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】
- 动态规划算法分析及实例——求解完全背包问题(java实现)
- HDU 1284 钱币兑换问题 动态规划完全背包
- 完全背包问题(贪婪法)
- 01背包问题和完全背包问题
- hdu 1284 钱币兑换问题 完全背包基础题