揹包問題解析

2021-06-17 21:39:39 字數 1113 閱讀 5837

一.最簡單的揹包問題----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...