1. 程式人生 > 實用技巧 >線性動態規劃

線性動態規劃

線性動態規劃--揹包問題

注意

狀態的定義一定要明確。

我們要把所有的問題一般化,把其轉化為價值,代價,什麼的,總之與揹包問題要掛上鉤

for (int i = 1; i <= n; i++)
  for (int l = W; l >= w[i]; l--) f[l] = max(f[l], f[l - w[i]] + v[i]);

下面我來口胡一下,為什麼是這樣的,首先,我們考慮物品是否加入,肯定要從第一個物品考慮,這樣,我們第一位列舉物品,第二位我們列舉揹包的容積,一開始揹包是滿的,所以要從揹包的 最大容量來進行列舉,

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

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

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

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