dp-完全揹包

mcr130102發表於2024-07-20

解釋

完全揹包模型與 0-1 揹包類似,與 0-1 揹包的區別僅在於一個物品可以選取無限次,而非僅能選取一次。

我們可以借鑑 0-1 揹包的思路,進行狀態定義:設$f_{i,j}$ 為只能選前 i 個物品時,容量為 j 的揹包可以達到的最大價值。

需要注意的是,雖然定義與 0-1 揹包類似,但是其狀態轉移方程與 0-1 揹包並不相同。

過程

可以考慮一個樸素的做法:對於第 i 件物品,列舉其選了多少個來轉移。這樣做的時間複雜度是 O(n^3) 的。

狀態轉移方程如下:
$f_{i,j}=\max_{k=0}^{+\infty}(f_{i-1,j-k\times w_i}+v_i\times k)$
考慮做一個簡單的最佳化。可以發現,對於 f_{i,j},只要透過 f_{i,j-w_i} 轉移就可以了。因此狀態轉移方程為:f_{i,j}=\max(f_{i-1,j},f_{i,j-w_i}+v_i)
理由是當我們這樣轉移時,f_{i,j-w_i} 已經由 f_{i,j-2\times w_i} 更新過,那麼 f_{i,j-w_i} 就是充分考慮了第 i 件物品所選次數後得到的最優結果。換言之,我們透過區域性最優子結構的性質重複使用了之前的列舉過程,最佳化了列舉的複雜度。

相關文章