为什么是整型背包的Capacity-1

Why Capacity-1 in integer knapsack?

本文关键字:Capacity-1 背包 整型 为什么      更新时间:2023-10-16

整数背包问题的动态规划解,对于容量为C的背包,对于n个物品,其中第1个物品的大小为Si,值为Vi,则为:

M (C) = max (M(颈- 1),M(同单晶硅)+(六),我从1到n

这里M是一个数组。M(C)表示容量为C的背包的最大值。

M(C-1)在这个关系中有什么用?我的意思是,解决方案应该是这样的:

M (C) = max (M(同单晶硅)+(六),我从1到n

我认为M(C-1)涵盖的所有情况都包含在M(C)中。

如果我错了,请给我一个例子。

我想你的公式设置有点混乱——具体来说,你把袋子的容量和n-1个物品的子问题混淆了。让我们重新定义一个bit

  • P表示问题,用n项列表表示。
  • 进一步,设Pk表示由原问题索引为1...k的项组成的子问题,其中1 <= k <= n。因此,Pn相当于P
  • 对于索引为i的每一项,设Vi表示该项的值,Si表示该项的大小。
  • C为袋子的容量,C >= 0
  • M(Pk, C)表示容量为C的包装袋Pk所描述的问题的最优解。M(Pk, C)返回解决方案中包含的物品列表(因此也返回最优解决方案的值和袋子中的剩余容量)。

对于每一项,我们可以将其包含在最优解中,也可以不包含在最优解中。显然,最优解决方案是这两个选项中的任何一个。唯一需要考虑的情况是,如果有问题的物品不能装进包里。在这种情况下,我们必须排除它。

我们可以依靠递归来覆盖我们的每一项,因此不需要迭代。

M (Pk, C) =如果(Sk> C) M (p (k - 1), C)其他马克斯(M (p (k - 1), C), Vk + M (p (k - 1), C-Sk))