Algorithm 无重复背包与有重复背包的不同应用

Algorithm 无重复背包与有重复背包的不同应用,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我想知道是否有一些情况可以只用一个或另一个来解决,即只使用带重复的背包或不带重复的背包,或者这两者是否总是可以相互还原 为了澄清,我们得到了n个项目[1…n],其中项目i的权重为w_i,值为v_i,并试图选择项目组合,以使总价值最大化,同时总重量保持在一些w以下 用动态规划的方法给出了无重复背包的求解方法 K(w, j) = max{K(w-w_j, j-1) + v_j, K(w, j-1)} 式中,Kw,j指使用容量为k的背包和项目1…j可达到的最大值,而重复背包的公式为: K(w) =

我想知道是否有一些情况可以只用一个或另一个来解决,即只使用带重复的背包或不带重复的背包,或者这两者是否总是可以相互还原

为了澄清,我们得到了n个项目[1…n],其中项目i的权重为w_i,值为v_i,并试图选择项目组合,以使总价值最大化,同时总重量保持在一些w以下

用动态规划的方法给出了无重复背包的求解方法

K(w, j) = max{K(w-w_j, j-1) + v_j, K(w, j-1)}
式中,Kw,j指使用容量为k的背包和项目1…j可达到的最大值,而重复背包的公式为:

K(w) = max{K(w-w_i) + v_i | w_i <= w}

式中,Kw是背包容量为w时可达到的最大重量。

您始终可以将重复背包减少为无重复背包,但不能反过来。要将一个有重复的背包减少为一个没有重复的背包,只需将每个物体添加到背包容量的倍数。你可以想象,你将永远无法在背包中放入更多的实例,因此结果将与拥有无限多个副本一样

证明没有重复的背包不能被还原为具有重复的背包,考虑下面的例子:

您有3件物品,价格和重量分别为:100美元、1公斤、10美元、2公斤和20美元、3公斤。再想象一下,我们的背包能装3公斤。如果我们允许重复,最好的解决方案是采用第一种类型的3个对象,但如果不重复,最好的解决方案是采用第一种和第二种对象,从而产生更小的利润