個人筆記 演算法講座3 揹包問題及其變種

2021-10-03 19:47:32 字數 1310 閱讀 2067

設計乙個動態規劃問題需要首先搞清楚他的:

同質子結構

狀態轉移方程

備忘錄(即動態規劃中動態儲存資料的東西)

如果將揹包問題用方程 f(w,i) 表示 w 為揹包容量,i 為物品個數

則對於每乙個物品,只需要考慮裝入揹包 or 不裝入揹包這兩個情況

對於 f(4,3)=9 i=3(weight=8,value=9)

是由f(4,3) = max = 9 得來的

f(w,i) = max

補充:需要條件判斷 w>=i.weight 即w-i.weight>=0

->01揹包應用例項

01揹包有幾個非常嚴肅的情況

如下圖所示,用一維陣列作備忘錄,可能出現多次加當前物品的value的情況,這樣的話就變成了乙個完全揹包問題。???

物品有無限件

不是放不放,而是放幾個的問題(當然有n種物品)

->完全揹包應用例項

第 i 個物品有 n 個

放幾個的問題,但不能超過n

-∞ (w<0)

f(w,i)=

0 (w=0 or i=0)

max (w>0 && i>0 && 0

物品被分成若干組,每組中的物品相互衝突。

每組中要麼選乙個,要麼乙個不選。

-∞ (w<0)

f(w,i)=

0 (w=0 or i=0)

max , f( w , i-1 ) } (w>0 && i>0 && j 屬於 i 組)

顧名思義就是比 01揹包 多了乙個限制條件比如01揹包只有重量限制,二維揹包在重量限制的基礎上增加乙個體積限制。該問題的思路和01揹包一樣,只不過多增加一維(三維)去理解就可以了。

但是在編寫**的時候我遇到了看不懂的的錯誤,所以我將三位陣列優化成了二維陣列去動態儲存資料。

->二維揹包應用例項

演算法3 揹包問題

揹包問題和01揹包問題是很經典的關於動態規劃和貪心演算法的題目。這兩個問題很相似,01揹包是有乙個容量為c的揹包,裝入一些質量為w 的且價值為v 的物品,每次只能選擇放入或者不放,不能只放一部分某個物品。求出可以讓揹包裝最大價值的乙個x 其中的每一項表示第 i 個物品是否要裝入。揹包問題跟01揹包相...

揹包問題3(多重揹包)

基於上次說的01揹包和完全揹包,揹包三連發還有最後乙個 多重揹包 什麼事多重揹包,很簡單就是把01揹包和完全揹包結合起來的新揹包問題就叫做多重揹包。有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容...

演算法(揹包問題 01揹包問題)

01揹包問題 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,...