一.最簡單的揹包問題----01揹包
1.題:有n件物品和乙個容量為v的揹包。第i件物品的體積是c[i],價值是w[i]。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。
2.思路:每乙個物品可以放也可以不放,因此比較放的時候的價值和不放的時候的價值,用max函式比較
3.方程:
即f[i][v]表示前i件物品恰放入乙個容量為v的揹包可以獲得的最大價值。 則其
狀態轉移方程
便是:f[i][v]=max。
可以壓縮空間,f[v]=max
二.完全揹包問題
1.題目
有n中物品和乙個容量為v的揹包,每種物品都有無限見可用。第i件物品的費用是w[i],價值是c[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
2.思路:
這個問題非常類似於01揹包問題,所不同的是每種物品有無限件,與他相關的策略已經不是取或不取兩種,而是有0件,1件,2件....等很多種。
3.優化方程:
也可以像01揹包那樣得到優化方程:
這個演算法使用一維陣列,核心**如下:
for i=1..n
for v=0..v
f[v]=max; 4.
小結你會發現,這個偽**與01揹包問題的偽**只有v的迴圈次序不同而已。
完全揹包問題也是乙個相當基礎的揹包問題,它有兩個狀態轉移方程:
f[i][v]=max
f[v]=max
後面兩個方程是乙個意思。希望你能夠對這三個狀態轉移方程都仔細地體會,不僅記住,也要弄明白它們是怎麼得出來的,最好能夠自己想一種得到這些方程的過程。
三.多重揹包問題 1.
題目有n種物品和乙個容量為v的揹包。第i種物品最多有n[i]件可用,每件費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
2.基本演算法
這題目和完全揹包問題很類似。基本的方程只需將完全揹包問題的方程略微一改即可,因為對於第
i種物品有n[i]+1種策略:取0件,取1件……取n[i]件。令f[i][v]表示前i種物品恰放入乙個容量為v的揹包的最大權值,則有狀態轉移方程:
f[i][v]=max
揹包問題解析
今天看到演算法 c語言實現這本書 第五章遞迴與樹 中 揹包問題,想到對這個問題理解不夠透徹.希望利用第一篇技術部落格好好的吃透它.揹包問題是什麼?設有i類不同大小和價值的物品,揹包的可用容積為cap,進行合理的物品選擇使得所裝入的物品價值最大.揹包問題解法?設定 揹包大小為cap,對應第i項物品記為...
揹包問題解析
01揹包問題 有n件物品和乙個容量為v的揹包。第i件物品的容量是v i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。解析 每件物品有且僅有一件,可以放或不放。f i j 表示前i件物品放入容量為j的揹包的最大價值。狀態轉移方程 for i in 1 n for j in 1 m f i j...
超大揹包問題題解
有 n nn 個重量和價值分別為 w iw i wi 和 v iv i vi 的物品。從這些物品中挑選出總重量不超過 w ww 的物品放入揹包中,求揹包裡物品價值總和的最大值。n wv 1w1v 2w2.vnw nn space w v 1 space w 1 v 2 space w 2 v n s...