1. 程式人生 > >(0-1)揹包問題

(0-1)揹包問題

1、0-1 揹包問題

  • 一個小偷在洗劫一家商店時找到了n個物品:其中第 i 個物品價值v_i並且重w_i (v_i, w_i都是整數)
  • 小偷的揹包只能承受W的重量
  • 物品要麼被帶走要麼留下
  • 帶哪些物品可以在指定的重量下達到價值最大呢?

2、可帶碎片的揹包問題

  • 與上述基本相同
  • 小偷可以帶走一個物品的一部分

3、小偷有一個可承受 W 的揹包,有n件物品: 第 i 個物品價值v_i並且重w_i 。

  目標:找到 xi 使得對於所有的 xi = {0, 1}, i = 1, 2, .., 並且 最大。

4、最優子結構

  • 考慮最多重W的物品且價值最高
  • 如果我們把j物品從揹包中拿出來==> 剩下的裝載一定是取自n-1個物品使得不超過載重量W – wj並且所裝物品價值最高的裝載

5、0-1 揹包問題的動態規劃

  V[i, w] :考慮前i件物品所能獲得的最高價值,其中 w 是揹包的承受力

  •    第1種情況:物品 i 的重量 w_i<=w,小偷對物品 i 可拿或者不拿

    V[i,w] = max{V[i-1, w], V[i-1,w-wi] + vi}

  •    第2種情況:物品i的重量 w_i>w,即小偷不拿物品 i

    V[i, w] = V[i - 1, w]

 

構造最優解法:

子問題的重複:

 

 

6、演算法過程