资源背包类型动态规划.docVIP

  • 0
  • 0
  • 约1.05万字
  • 约 11页
  • 2017-10-06 发布于重庆
  • 举报
资源背包类型动态规划

资源背包类型动态规划 资源背包类型动态规划是动态规划中的经典问题,在近几年联赛中经常出现,甚至在NOIP 2006的普及组和提高组中同时出现。因此如何较好地掌握这一问题的解决方法,提升学生的思维能力,成为了一个值得研究的热点问题。本文对资源背包类型问题进行了系统的分类,对每个子类的背包问题进行了较深入的算法分析和对比研究,旨在能够深入理解背包问题的内涵。下面主要讲解三类背包问题,即0-1背包、完全背包、二维背包。 一、0-1背包 1.经典的背包问题—0-l背包 【例题1】0-1背包 【问题描述】 在0-1背包问题中,需对容量为C的背包进行装载。从n个物品中选取装入背包的物品,每件物品i的重量为wi,价值为vi。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即v1×xl+v2×X2+…+Vi×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-l背包。 【思路点拨】 第一次看到背包类的问题,容易想到贪心策略,但是贪心策略得不到最优解。从物品上进行贪心,不外乎三个方面:重量、价值和价值/重量,下面一一分析: ????贪心1:对输入数据,以物品重量排序,越轻的越靠前。以样例为例,得到如下表所示的排序结果。 物品序号 重量 价值 ① 2 1 ⑥ 3 1 ② 4 7 ③ 5 4 ④ 6 5 ⑤ 10 11 以物品重量排序得到的结果(越轻的越靠前) ????根据排序结果,在剩下的物品中每次选择最轻的装入背包。背包的容量为11,此时选择物品的编号为①、⑥、②,得到的总价值为9,而输出样例的最大价值为12,这种选择显然不对。 ?? ??贪心2:对输入的数据,以物品的价值排序,价值越高的越靠前。以输入样例为例,得到如下表所示的排序结果。 物品序号 重量 价值 ⑤ 10 11 ② 4 7 ④ 6 5 ③ 5 4 ① 2 1 ⑥ 3 1 ??? ?以物品价格排序得到的结果(价格越高的越靠前) ???? 根据排序结果,在剩下的物品中选择价值越高的装入背包.此时可以选择的物品为⑤,得到的总价值为11,小于输出样例12。此方案也不对。 ???? 贪心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=l,2,3,...,n给物品标号,下面逐一分析物品的状态及相应的价值。 ???? 对于第一个物品,如果A1=0,则问题转变为背包容量仍为m,在2,3,,..,n个物品中选择;如果A1=l,则问题转变为背包容量为m-w1,在2,3,.,.,n个物品中选择,此时最大价值为max{f(m),f(m-w1)+v1},f(m)表示在背包容量为m时,在剩下的物品中选择物品的最大价值。第一次决策之后,剩下的问题便是考虑在重量为{m,m-w1}两种情况下选择最优方案的问题了。以此类推,直到所有物品都试探过,得出最大价值。这个问题明显具有最优子结构性质和无后效性,可以使用动态规划方法解决。 ????(1)阶段和状态 ????①以在前i件物品中选择若干件物品为阶段; ????②在前i件物品中,选取若干件物品放入所剩空间为j的背包中所能获得的最大价值为状态; ????③以放第i件物品或不放第i件物品为决策。 ????设f?[i][j]:表示选择前i个物品,背包容量为j时所获得的最大价值。 ????(2)状态转移方程 ????f[i][j]?=max{f[i-l][j],f[i-l][j

文档评论(0)

1亿VIP精品文档

相关文档