动态规划 —— 背包问题 P08 —— 泛化物品背包
【定义】
泛化物品的概念:有这样一种物品,它并没有固定的费用和价值,而是它的价值随着你分配给它的费用而变化。
更严格的定义:在背包容量为V的背包中,泛化物品是一个定义域为0..V中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。
这个定义有一点点抽象,另一种理解是一个泛化物品就是一个数组h[0..V],给它费用v,可得到价值h[V]。
对于一个费用为c价值为w的物品:
如果它是01背包中的物品,那么把它看成泛化物品,它就是除了h(c)=w其它函数值都为0的一个函数。
如果它是完全背包中的物品,那么它可以看成这样一个函数,仅当v被c整除时有h(v)=v/c*w,其它函数值均为0。
如果它是多重背包中重复次数最多为n的物品,那么它对应的泛化物品的函数有h(v)=v/c*w仅当v被c整除且v/c<=n,其它情况函数值均为0。
一个物品组可以看作一个泛化物品h,对于一个0..V中的v,若物品组中不存在费用为v的的物品,则h(v)=0,否则h(v)为所有费用为v的物品的最大价值。
P07中每个主件及其附件集合等价于一个物品组,自然也可看作一个泛化物品。
【泛化物品的和】
如果面对两个泛化物品h和l,给定的费用,要求从这两个泛化物品中得到最大的价值。
事实上,对于一个给定的费用v,只需枚举将这个费用如何分配给两个泛化物品就可以了。同样的,对于0..V的每一个整数v,可以求得费用v分配到h和l中的最大价值f(v),即:f(v)=max{h(k)+l(v-k) | 0<=k<=v}。
可以看到,f也是一个由泛化物品h和l决定的定义域为0..V的函数,也就是说,f是一个由泛化物品h和l决定的泛化物品。
由此可以定义泛化物品的和:h、l都是泛化物品,若泛化物品f满足f(v)=max{h(k)+l(v-k) | 0<=k<=v},则称f是h与l的和,即:f=h+l。
这个运算的时间复杂度取决于背包的容量,是O(V^2)。
泛化物品的定义表明:在一个背包问题中,若将两个泛化物品代以它们的和,不影响问题的答案。
事实上,对于其中的物品都是泛化物品的背包问题,求它的答案的过程也就是求所有这些泛化物品之和的过程,设此和为s,则答案就是s[0..V]中的最大值。
【背包问题的泛化物品】
一个背包问题中,可能会给出很多条件,包括每种物品的费用、价值等属性,物品之间的分组、依赖等关系等,但肯定能将问题对应于某个泛化物品。
也就是说,给定了所有条件以后,就可以对每个非负整数v求得:若背包容量为v,求将物品装入背包可得到的最大价值是多少?这可以认为是定义在非负整数集上的一件泛化物品。
这个泛化物品——或者说问题所对应的一个定义域为非负整数的函数——包含了关于问题本身的高度浓缩的信息。
一般而言,求得这个泛化物品的一个子域(例如0..V)的值之后,就可以根据这个函数的取值得到背包问题的最终答案。
综上所述,一般而言,求解背包问题,即求解这个问题所对应的一个函数,也即该问题的泛化物品,而求解某个泛化物品的一种方法就是将它表示为若干泛化物品的和然后求之。
动态规划 —— 背包问题 P08 —— 泛化物品背包相关推荐
- 动态规划 —— 背包问题 P07 —— 有依赖背包
[简化的问题] 这种背包问题的物品间存在某种"依赖"的关系,也就是说,i依赖于j,表示若选物品i,则必须选物品j. 为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品 ...
- 动态规划 —— 背包问题 P05 —— 二维背包
[问题] 对于每件物品,具有两种不同的体积,选择这件物品必须同时付出这两种代价,对于每种代价都有一个可付出的最大值(背包容量). 问:怎样选择物品可以得到最大的价值? 设:这两种代价分别为代价1和代价 ...
- 动态规划/背包问题总结/小结——01背包、完全背包
文章目录 前言 动态规划五步法 01背包模型 完全背包 总结 前言 背包问题也属于动态规划问题. 动态规划就是将复杂的大问题转化为一个小问题,然后将小问题转化为更小的容易求解的问题:通过将最小的容易求 ...
- 动态规划——背包问题整理(01背包+完全背包)
1.引言 背包问题简单描述,其实就是有一堆物品同时具有一定价值和重量,现有一个背包可以承受最大重量m,那么要怎么选择在不超过背包最大重量的前提下,使背包中选择的物品价值最大. 最常见的背包问题又可以分 ...
- 动态规划 —— 背包问题
[概述] 背包问题(Knapsack problem)是一种组合优化的NP完全问题. 问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最 ...
- 动态规划-背包问题、兑换零钱问题、旅行商问题
背包问题 问题介绍 假定需要将Goods={g1,g1,-gn}放入容量为ALL的背包内,volumej代表第i个物品的体积,valuej代表第j个物品的价值.我们要把这些物品装进背包,这些物品的体积 ...
- 第45期:动态规划-背包问题
目录 1. 01背包 1. 2. 01背包问题 - AcWing题库 2.完全背包(无限背包) 1. 疯狂的采药 - 洛谷 3.多重背包 二进制优化多重背包 单调队列优化多重背包 4. 树形背包 1. ...
- 动态规划——背包问题(01背包问题)
动态规划--背包问题(01背包问题) 01背包问题(求最大价值): 问题优化 01背包问题(求方案数): 动态规划--背包问题(01背包问题) 01背包问题(求最大价值): 有N件物品和一个最多能背重 ...
- 【算法设计与分析基础】21、动态规划-背包问题
问题: * 对一组物品: * 重量为:w1,w2,w3....wn * 价值为:v1,v2,v3,....vn * 和一个可以存放重量为W的背包 * 求这些物品装进去如何才会是最右价值的装法 解题思路 ...
最新文章
- pandas.series的数据定位为什么用两个左中括号[[
- 制度缺陷,美国96%受访公司的人工智能项目陷于停顿,难怪封堵
- 人生三部曲:顺序,选择,循环
- linux基础知识和命令试题,Linux基础试题及答案
- WINDOWS消息系统简洁图解
- 让“云”无处不在-Citrix Xenserver之三 license server
- ubuntu登陆后一闪回到登陆界面
- IOSelect模块
- python 只用opencv吗,python – OpenCV:使用solvePnP来确定单应性
- html 数组输入框,javascript输入数组
- java中ofd文件转pdf_java ofd文件解析
- WIN10 重装后的自我救赎 ----恢复谷歌浏览器的数据
- 佳能Canon PIXMA MP630 一体机驱动
- 7-6 统计大写辅音字母
- stm32点亮流水灯(小白的求学之路)
- Elesticsearch(es)聚合搜索(入门到精通)3
- oracle存储超长文本
- DataList控件的使用
- 基于对抗生成网络的图像转换技术【论文笔记】
- 如何看待996的工作模式