假设我们希望拣选物品(可能有重复的物品),以使总容量正好为C,同时使拣选物品的总价值最小。
要使用动态编程解决此问题,我们可以创建表Copt[w]
,这是每个0 ≤ w ≤ C
的容量为C所需的最小总值。
基本情况为Copt[0] = 0
。动态程序的过渡是:
Copt[w] = mini= w[i]≤ C (Copt[w-wi] + vi)
。
假设我们有C = 8
和以下三个项目:
计算Copt[1]
到Copt[8]
的值,这是组成权重1…8的最小值。
对背包0/1使用动态算法后;我获得的最大值是5。
但是,以肉眼看,我希望该值为24。
您可以在这些图像中看到