設計乙個動態規劃問題需要首先搞清楚他的:
同質子結構
狀態轉移方程
備忘錄(即動態規劃中動態儲存資料的東西)
如果將揹包問題用方程 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 行,...