【问题】

对于每件物品,具有两种不同的体积,选择这件物品必须同时付出这两种代价,对于每种代价都有一个可付出的最大值(背包容量)。

问:怎样选择物品可以得到最大的价值?

设:这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为c[i]。

【算法】

费用加了一维,只需状态也加一维即可。

设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。

状态转移方程就是:f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+c[i]}

如前述方法,可以只使用二维的数组:当每件物品只可以取一次时变量v和u采用逆序的循环,当物品有如完全背包问题时采用顺序的循环。当物品有如多重背包问题时拆分物品。

【物品总个数的限制】

有时,“二维费用”的条件是以这样一种隐含的方式给出的:最多只能取M件物品。这事实上相当于每件物品多了一种“件数”的费用,每个物品的件数费用均为1,可以付出的最大件数费用为M。换句话说,设f[v][m]表示付出费用v、最多选m件时可得到的最大价值,则根据物品的类型(01、完全、多重)用不同的方法循环更新,最后在f[0..V][0..M]范围内寻找答案。

【实现】

设s[i][j][k]表示将前i件物品放入两种容量分别为j和k的背包时所能获得的最大价值,则状态转移方程为f[i][j][k]=max{f[i-1][j][k], f[i-1][j-v[i]][k-u[i]]+c[i]},递推边界为当i=0时f[i][j][k]=0。和01背包类似,状态的维数可以轻易的从三维降低到二维,具体实现见下。

for (int i=0; i<=V; i++) // 边界for (int j=0; j<=U; j++)s[i][j]=0;
for (int i=1; i<=N; i++)for (int j=V; j>=v[i]; j--)for (int k=U; k>=u[i]; k--) s[j][k]=max(s[j][k], s[j-v[i]][k-u[i]]+c[i]);

动态规划 —— 背包问题 P05 —— 二维背包相关推荐

  1. c++ 动态规划-二维背包 and 潜水员问题

    动态规划 - 二维背包 1.普通二维(费用)背包 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问:如何选择 ...

  2. HDU-2159 FATE 二维背包

    这题是一个二维背包的题目,刚开始并没有那样去做,只开了一维的空间来存储状态,结果很多的数据都没有跑过去.其实这题这样来问的话可能就明了很多了,求在指定的容忍值和指定的杀怪数下,求最大能够得到了经验数, ...

  3. HDU-2159 FATE 二维背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 杭电2159-FATE (二维背包运用+详细解释)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. 二维背包问题(二维0-1背包)

    二维0-1背包问题 问题描述 算法思路与代码实现 方法一:普通动归方法 方法二:空间优化法 代码1:方法一 从n个物品中的第1个物品开始考虑(从前往后考虑). 从n个物品中的第n个物品开始考虑(从后往 ...

  6. 背包问题(恰好背满 二维背包) 总结

    专题训练:点击打开链接  密码:JXFEACM 他人总结:点击打开链接  背包九讲:点击打开链接 其实核心记住: 背包是组合问题 填充性质 元素之间没关系 1. 01背包(右->左) 恰好装满( ...

  7. HDU2159 FATE(二维背包、带限制条件的背包问题)

    题目传送门 题意很明显,就不细说了 我们这里可以把剩下的忍耐度看作背包容量,然后价值就是杀了怪所得的经验 用第二维表示杀了q只怪,这样就能用dp[j][q]表示已消耗j点忍耐度,杀了q只怪时的经验值 ...

  8. 完全背包问题(二维数组)

    通过三天的发文章,终于稍微弄明白MarkdownMarkdownMarkdown了,接下来话不多说,直接干正事. 前两篇文章分别和大家讲了一下01背包的两种做法,感兴趣的可以去看看. 今天和大家分享一 ...

  9. 动态规划/背包问题总结/小结——01背包、完全背包

    文章目录 前言 动态规划五步法 01背包模型 完全背包 总结 前言 背包问题也属于动态规划问题. 动态规划就是将复杂的大问题转化为一个小问题,然后将小问题转化为更小的容易求解的问题:通过将最小的容易求 ...

最新文章

  1. 降维-基于RDD的API
  2. AngularJs--过滤器(filter)
  3. JedisConnectionException: java.net.SocketException: Broken pipe
  4. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车黑线循迹实验 四驱
  5. java 任意数平均值_【编程题】通过键盘输入三个任意的数字,计算三个值的平均值,并输出结果。...
  6. ShardingSphere(一)ShardingSphere简单介绍及相关概念
  7. 【数电】(二) 基本逻辑运算与逻辑门电路
  8. 弹出页面,弹出框,$(‘‘).modal({});模态框
  9. mysql导出数据到文件_MySQL导出数据到文件中
  10. 比特币工作量证明,“法外之地”的法
  11. delphi CnPack
  12. php 显示探针_雅黑php 探针
  13. 一种简单的zabbix客户端 主机hostid查看方法
  14. CISCO ISIS
  15. Docplex入门(1)——线性规划
  16. 设计模式-行为型-访问者模式
  17. BAT脚本实现FTP文件自动传输
  18. 解决Jupyter notebook报错:AssertionError: wrong color format ‘var(--jp-mirror-editor-variable-color)‘
  19. 黑苹果在线安装版本安装教程
  20. php 选择地区 查找,地区编码查询_php根据ip查询所在地区的代码

热门文章

  1. OMG!这1010本书的书名都是什么鬼?
  2. 360的服务器在哪个文件夹,如何卸载服务器上顽固的360
  3. 罗马音平假名片假名转换器_记不住五十音的你,你肯定需要这套日语五十音谐音巧记法...
  4. 新书进展和我的决定。
  5. 新手也能看懂的 SpringBoot 异步编程指南
  6. 贝壳找房技术总监肖鹏:高速成长下的技术团队怎么带?
  7. 微信小程序实战开发视频
  8. PyTorch【torchvision】
  9. x86 和 ARM 谁能主宰服务器市场?Linux 之父和 Redis 之父有分歧了
  10. MySQL运维实战系列:MySQL5.7 Group By 问题