动态规划-背包问题专题.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划-背包问题专题

动态规划 - 背包问题及其变形 长沙市一中 曹毅 回顾:动态规划的核心要素 基本概念: 阶段 状态 状态转移方程 使用条件: 最优子结构 无后效性 背包问题: 01背包问题 完全背包问题 多重背包问题 混合背包问题 二维费用的背包问题 分组背包问题 有依赖背包问题 01背包 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路:对于第i件物品,我们有两个选择:放或者不放,用f[i][v]表示前i件物品恰放入容量为v的最大价值,于是有两种情况: 不放:f[i][v]=f[i-1][v] 放: f[i][v]=f[i-1][v-c[i]]+w[i] 最后取这两者的最大值 于是得出状态转移方程: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 边界:f[1][0]=0(不装任何东西) 核心代码: for i=1..n for v=v..0 f[i][v]=max{f[i-1][v],f[i-1][v-w[i]]+c[i]} 时空分析及优化 以上方法的时间和空间复杂度均为O(N*V),其中时间复杂度基本已经不能再优化了,但空间复杂度却可以优化到O(V)。 f[i][v]-f[v] ‘f[v]表示重量不超过V公斤的最大价值 数据: 10 4 重量 价值 求得: 2 1 3 3 4 5 7 9 f[1] 0 f[2] 1 f[3] 3 f[4] 5 f[5] 5 f[6] 6 f[7] 9 f[8] 9 f[9] 10 f[10] 12 完全背包问题 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 区别:第i件物品可以无限装,01背包只能装一次 转换:f[v]=max{f[v],f[v-k*w[i]]+k*c[i]} 其中0=k*w[i]=v for i=1..n for v=0..v f[i][v]=max{f[i-1][v],f[i-1][v-w[i]]+c[i]} 01背包与完全背包对比 数据: 10 4 重量 价值 求得: 2 1 3 3 4 5 7 9 01背包 f[1] 0 f[2] 1 f[3] 3 f[4] 5 f[5] 5 f[6] 6 f[7] 9 f[8] 9 f[9] 10 f[10] 12 完全背包 f[1] 0 f[2] 1 f[3] 3 f[4] 5 f[5] 5 f[6] 6 f[7] 9 f[8] 10 f[9] 10 f[10] 12 完全背包的优化: 1.简单优化:w[i]=w[j] 且c[i]=c[j]则去掉j物品(性价比低) 2.二进制优化,核心思想:将第i种物品拆成若干个物品,其中每件物品有一个系数,这件物品的费用和价值均是原来的费用和价值乘以这个系数。使这些系数分别为 1,2,4,...,2^(k-1),n[i]-2^k+1,且k是满足n[i]-2^k+10的最大整数。例如,如果n[i]为13,就将这种物品分成系数分别为1,2,4,6的四件物品。目的还是转换为01背包问题。 多重背包问题: 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 分析:类似完全背包,k的取值范围有所变化 f[i][v]=max{f[i-1][v-k*c[i]]+ k*w[i]|0=k=n[i]}。复杂度是O(V*∑n[i]) 混合背包问题: 其实是将多种背包问题混在一起,无需多讲,在循环时根据不同的背包类型进行不同的处理即可,此处不再赘述。 二维费用背包问题: 同上,加多一维数组即可。 状态转移方程: f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]} 分组背包问题(同组互斥) 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 分析:这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则有f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]|物

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档