2 揹包優化

2021-09-25 19:35:33 字數 623 閱讀 3306

空間複雜度優化

記錄路徑

滿揹包1、複雜度

以上動態規劃的時間複雜度與空間複雜度均為o(n* v)。

定義狀態:設dp[j]表示把i件物品放入容量j的揹包可獲得的最大價值。

狀態轉移方程為:

2、記錄路徑

如果想知道最大價值的方案裡,揹包裡都放了哪些物品,該怎麼做?

只要用乙個二維陣列path來儲存每次更新放入的物品,然後從後往前遍歷輸出。

用path逆推出裝入的物品:

i = i - 1

如果使用二維狀態,則無需path也可以倒推出裝入的物品。

3、滿揹包

有時候,題目會要求揹包剛好裝滿,這種情況與不裝滿的情況比,初始化不一樣:

在c++中,一般可用0x3f3f3f3f表示無窮大。

01揹包案例

揹包問題2(完全揹包)

問題的提出 有n種物品,乙個容量為v的揹包,每種物品可以無限的加入揹包,第i種物品的價值為v i 花費為w i 求將那些裝入揹包能讓價值最大且不超過揹包的容量?思路 該題類似於01揹包,唯一的不同就是所有的物品可以無限取,這樣從物品的角度考慮就會有多中方法,不像01中的取或不取 當然01揹包作為最基...

揹包問題2 完全揹包

一,題目 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是c i 價值是w i 求解將哪些物品裝入 揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。二,基本思路 從每種物品的角度考慮,與它相關的策略已並非取或不取兩種,而是有取0件 取1件 取2件 等很多種。令f ...

揹包問題2

設f i,x 表示前i件物品,揹包容量為x時的最大價值,那麼轉移式可以表示為f i,x max f i 1,x w i c i f i 1,x 那麼f n,m 即為最優解。其實整體思想則表示為從容量為1的開始計算並且後面的計算不斷的使用前面已經計算的值,這樣就可以避免重複計算。code includ...