首页 > 其他分享 >动态规划之二维费用的背包问题

动态规划之二维费用的背包问题

时间:2023-06-30 21:13:27浏览次数:52  
标签:费用 件物品 二维 背包 物品 动态 代价

问题

二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[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]]+w[i]}

如前述方法,可以只使用二维的数组:当每件物品只可以取一次时变量v和u采用逆序的循环,当物品有如完全背包问题时采用顺序的循环。当物品有如多重背包问题时拆分物品。这里就不再给出伪代码了,相信有了前面的基础,你能够自己实现出这个问题的程序。

物品总个数的限制

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

复数域上的背包问题

另一种看待二维背包问题的思路是:将它看待成复数域上的背包问题。也就是说,背包的容量以及每件物品的费用都是一个复数。而常见的一维背包问题则是实数域上的背包问题。(注意:上面的话其实不严谨,因为事实上我们处理的都只是整数而已。)所以说,一维背包的种种思想方法,往往可以应用于二位背包问题的求解中,因为只是数域扩大了而已。

作为这种思想的练习,你可以尝试将P11中提到的“子集和问题”扩展到复数域(即二维),并试图用同样的复杂度解决。

小结

当发现由熟悉的动态规划题目变形得来的题目时,在原来的状态中加一纬以满足新的限制是一种比较通用的方法。希望你能从本讲中初步体会到这种方法。

标签:费用,件物品,二维,背包,物品,动态,代价
From: https://www.cnblogs.com/shoshana-kong/p/17517820.html

相关文章

  • 动态规划之 附录二:背包问题的搜索解法
    《背包问题九讲》的本意是将背包问题作为动态规划问题中的一类进行讲解。但鉴于的确有一些背包问题只能用搜索来解,所以这里也对用搜索解背包问题做简单介绍。大部分以01背包为例,其它的应该可以触类旁通。简单的深搜对于01背包问题,简单的深搜的复杂度是O(2^N)。就是枚举出所有2^N......
  • 动态规划之 附录一:USACO中的背包问题
    USACO是USAComputingOlympiad的简称,它组织了很多面向全球的计算机竞赛活动。USACOTrainng是一个很适合初学者的题库,我认为它的特色是题目质量高,循序渐进,还配有不错的课文和题目分析。其中关于背包问题的那篇课文(TEXTKnapsackProblems)也值得一看。另外,USACOContest是US......
  • 动态规划之 背包问题问法的变化
    以上涉及的各种背包问题都是要求在背包容量(费用)的限制下求可以取到的最大价值,但背包问题还有很多种灵活的问法,在这里值得提一下。但是我认为,只要深入理解了求背包问题最大价值的方法,即使问法变化了,也是不难想出算法的。例如,求解最多可以放多少件物品或者最多可以装满多少背包的空......
  • 动态规划之泛化物品
    定义考虑这样一种物品,它并没有固定的费用和价值,而是它的价值随着你分配给它的费用而变化。这就是泛化物品的概念。更严格的定义之。在背包容量为V的背包问题中,泛化物品是一个定义域为0..V中的整数的函数h,当分配给它的费用为v时,能得到的价值就是h(v)。这个定义有一点点抽象,另一......
  • 动态规划之有依赖的背包问题
    简化的问题这种背包问题的物品间存在某种“依赖”的关系。也就是说,i依赖于j,表示若选物品i,则必须选物品j。为了简化起见,我们先设没有某个物品既依赖于别的物品,又被别的物品所依赖;另外,没有某件物品同时依赖多件物品。算法这个问题由NOIP2006金明的预算方案一题扩展而来。遵从该题......
  • 动态规划之分组的背包问题
    问题有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。算法这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是......
  • 动态规划之混合三种背包问题
    问题如果将P01、P02、P03混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合考虑到在P01和P02中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类......
  • vue:<img>动态绑定的路径无法解析问题
    问题我们引用图片,正常的静态img图片是这么引用的<imgsrc="@/assets/img/icoms/people.png"/>没问题,只要路径正确在vue中动态绑定路径:src<img:src="@/assets/img/icoms/people.png"/>发现图片根本加载不出来,因为:src根本不能解析@/assets/img/icoms/people.png解决......
  • 关于H5扫描二维码方式(plus)
    本文使用了HTML5+APIReference(参考地址:https://www.html5plus.org/doc/zh_cn/barcode.html#plus.barcode.getBarcodeById)代码示例newVue({el:"#list",data:{ text:'', barcode:null,},methods:{......
  • 动态规划01
    动态规划核心要义这一步的数据依据上一步或者上两步的数据动态规划五部确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组动态规划第一题斐波那契数列dp[i]表示第i个数列的值递推公式已经给出f(n)=f(n-1)+f(n-2)初始化已......