問題描述:01揹包是在n件物品取出若干件放在空間為v的揹包裡,每件物品的體積為v1,v2……vn,與之相對應的價值為p1,p2……pn(所有的體積值均為整數)。
環境工具:win7 python2.7
解決過程:考慮用動態規劃的方法來解決
階段 【在前n件物品中,選取若干件物品放入揹包中】
狀態 【在前n件物品中,選取若干件物品放入所剩空間為w的揹包中的所能獲得的最大價值】
決策 【第n件物品放或者不放】
可以寫出動態轉移方程
用f[i,j]表示在前 i 件物品中選擇若干件放在所剩空間為 j 的揹包裡所能獲得的最大價值
f[i,j]=max
基本上所有跟揹包相關的問題的方程都是由它衍生出來的。
演變解釋@考慮在v的空間下,放入n件物品能獲得最大價值(前n-1物品是最大價值的,第n件產品可以放進去)
=》考慮在v - vn的空間下,放入n-1件物品能獲得最大價值(前n-2物品是最大價值的,第n-1件物品可以放進去)
=》考慮在v - vn-1 - vn的空間下,放入n-2件物品能獲得最大價值(前n-3物品是最大價值的,第n-2件物品可以放進去)
=》考慮在v - v3 - v4... - vn的空間下,放入2件物品能獲得最大價值(前1物品是最大價值的,第2件物品可以放進去)
=》考慮在v - v2 - v3 - v4... - vn的空間下,放入1件物品能獲得最大價值(前0物品的價值是0,第1件物品可以放進去)
源**如下
#演算法驗證
if __name__ == '__main__':
limitvolume = 20#體積上限
itemsvolume = [1,2,5,7,9]#單個總體積
itemsvalue = [1,1,1,2,2]#單個總價值
hk01bag = dynamicbag(limitvolume, itemsvolume, itemsvalue)
(resultsumvolume, resultsumvalue, resultitemsvolume, resultitemsvalue) = hk01bag.dynamicsuitresult()
print '最大價值:'+str(resultsumvalue)
print '最大價值的單個價值:'
print resultitemsvalue
print '最大價值的總體積:'+str(resultsumvolume)
print '最大價值的單個總體積:'
print resultitemsvolume
0 1揹包問題python 0 1揹包問題1
鼓搗好久 終於了然了一些 0 1揹包問題描述 有乙個竊賊在偷竊一家商店時發現有n件物品,第i件物品價值為vi元,重量為wi,假設vi和wi都為整數。他希望帶走的東西越值錢越好,但他的揹包中之多只能裝下w磅的東西,w為一整數。他應該帶走哪幾樣東西?注 0 1揹包問題中 每件物品或被帶走,或被留下,需要...
0 1揹包問題 python
測試資料 n 6 物品的數量,c 10 書包能承受的重量,w 2,2,3,1,5,2 每個物品的重量,v 2,3,1,5,4,3 每個物品的價值 def bag1 n,c,w,v value 0for j in range c 1 for i in range n 1 i 物品 1 i for i ...
揹包問題 01揹包問題
n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...