- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
背包类型DP
背包类型DP
一、01背包
二、完全背包
三、多重背包
四、混全背包
五、二维背包
六、分组背包
七、领带背包
八、泛化物品
九、背包问题问法的变化
一、0-1背包
【例题】01背包
【问题描述】在01背包问题中,需对容量为v的背包进行装载。从n个物品中选取装入背包的物品,每件物品i的重量为wi,价值为ci。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即c1*x1+c2*x2+…+ci*xi(其1=i=n,x取0或1,取1表示选取物品i)取得最大值。
【文件输入】第一行一个数m,为背包容量(整数);第二行一个数n,为物品数量(整数);第三行n个数,以空格分开,为n(1=n=10000)个物品的重量;第四行n个数,以空格分开,为n个物品的价值(整数)。
【文件输出】输出文件仅一行为一个数,表示能取得的最大价值。
【样例输入】
11
6
2 4 5 6 10 3
1 7 4 5 11 1
【样例输出】12
【试题特点】每种物品仅有一件,可以选择放或不放,故称作为0-1背包。
【思路点拨】第一次看到背包类的问题,容易想到贪心策略,但是贪心策略得不到最优解。从物品上进行贪心,不外乎三个方面:重量、价值和价值/重量,下面一 一分析:
贪心1:对输入数据,以物品重量排序,越轻的越靠前。以样例为例,得到下表所示的排序结果。
物品序号 重量 价值 ① 2 1 ⑥ 3 1 ② 4 7 ③ 5 4 ④ 6 5 ⑤ 10 11 以物品重量排序得到的结果(越轻的越靠前)
根据排序结果,在剩下的物品中每次选择最轻的装入背包。背包的容量为11,此时选择物品的编号为①、⑥、②,得到的总价值为9,而输出样例的最大价值为13,这种选择显然不对。
贪心2:对输入的数据,以物品的价值排序,价值越高的越在前。以输入样例为例,得到如下表所示的排序结果。
物品序号 重量 价值 ⑤ 10 11 ② 4 7 ④ 6 5 ③ 5 4 ① 2 1 ⑥ 3 1 以物品价格排序得到的结果(价格越高的越靠前)
根据排序结果,在剩下的物品中选择价值越高的装入背包,此时可以选择的物品为⑤,得到总价值为11,小于输出样例13。此方案页不对。
贪心3:如果输入数据设置为n=3,m=6,物品重量依次为3,3,4,价值依次为4,4,7,则按照价值/重量排序,得到如下表所示的排序结果。
序号 重量 价值 价值/重量 ① 4 7 1.75 ② 3 4 1.33 ③ 3 4 1.33 价值/重量排序表
上述表中,根据背包容量,选择的物品为③,得到的总价值为7;而实际上,此输入数据的最大价值应为8,所以此种贪心也存在反例。
由上可知,三种贪心策略都存在反例,得不到最大价值。其实,背包问题中一个物品只有两种状态,要么被放入背包中,要么不放入背包中,用A1,..,An表示n个物品的状态,当Ai放入背包时,置Ai=1,不放入时置Ai=0。对于输入的所有物品,以i=1,2,3,..,n给物品标号,下面逐一分析物品的状态及相应的价值。
对于第一个物品,如果A1=0,则问题转变为背包容量仍为m,在2,3,..,n个物品中选择;如果A1=1,则问题转变为背包容量为m-W1,在2,3,...n个物品中选择,此时最大价值为max{Value(m),Value(m-Wi)+ci},Value(m)表示在背包容量为m时,在剩下的物品中选择物品的最大价值。第一次决策之后,剩下的问题便是考虑在重量为{m,m-W1}两种情况下选择最优方案的问题了。以此类推,直到所有物品都试探过,得出最大价值。这个问题明显具有最优子结构性质和无后效性,可以使用动态规划方法解决。
设置动态规划时,可以如下设置:
(1)以在前i件物品中选择若干件物品为阶段;
(2)在前i件物品中,选取若干件物品放入所剩空间为j的背包中所能获得的最大价值为状态;
(3)以放第i件物品或不放第i件物品为决策。
设f[i][j]:表示选择前i个物品,背包容量为v时的最大价值,可得到动态规划方程为:
f[i][v]=max{f[i-1][v],f[i-1][v-w[i]]+c[i](j=w[i])}
初始条件:f[i][0]=f[0][i]=0
ANSWER=f[n][m]
这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”;如果放第i件物品,那么
文档评论(0)