有n件物品和乙個容積為m的揹包。第i件物品的體積w[i],價值是d[i]。求解將哪些物品裝入揹包可使價值總和最大。每種物品只有一件,可以選擇放或者不放。(n<=3500,m<=130000)。
解題思路:
用f[i][j]表示取前i種物品,使它們總體積不超過j的最優取法取得的價值總和。
遞推:
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+d[i])
取或不取第i種物品,兩者選優(j-w[i]>=0才有第二項)
本題如用記憶型遞迴,需要乙個很大的二維陣列,會超記憶體。注意到這個二維陣列的下一行的值,只用到了上一行的正上方及左邊的值,因此可以用滾動陣列的思想,只要一行即可。即可用一維陣列,用「人人為我」遞推型動歸實現。
注意遞推的時候從右向左求一維陣列的值。
動態規劃之01揹包問題
首先是問題描述 給定n種物品和一揹包,物品i的重量是wi,其價值是pi,揹包的容量是m,問如何選擇裝入揹包中的物品總價值最大?可以這樣理解 揹包的揹負有上限,因此在這個上限內盡可能多的裝東西,並且價值越多越好。在這裡我之想討論動態規劃解決這個問題的詳細過程。動態規劃是用空間換時間的一種方法的抽象。其...
動態規劃之0 1揹包問題
問題描述 現有n件物品和乙個容量為c的揹包。第i件物品的重量是重量為w i 價值是v i 已知對於一件物品必須選擇取 用1表示 或者不取 用0表示 且每件物品只能被取一次 這就是 0 1 的含義 求放置哪些物品進揹包,可使這些物品的重量總和不超過揹包容量,且價值總和最大。求解思路 0 1揹包問題的遞...
動態規劃之0 1揹包問題
問題描述 0 1揹包問題是應用動態規劃設計求解的典型例題 已知n種物品和乙個可容納c重量的揹包,物品i的重量為w i 產生的效益為p i 在裝包時物品i可以裝入,也可以不裝,但不可拆開裝。問如何裝包,所得裝包總效益最大。演算法分析 最優子結構特性 0 1揹包的最優解具有最優子結構特性。與一般揹包問題...