動態規劃 揹包問題(01揹包 完全揹包)

2021-09-13 01:55:59 字數 690 閱讀 8305

揹包問題-多種物品 重量不同 價值不同、 你可以取最多重量不超過w的物品,問最大價值為多少?

01揹包 指的是 有n個物品 每個物品的重量為w[ i ],價值為v[ i ],(每個物品只有乙個),所有面臨這些物品只有兩種結果:

1、拿這件物品,揹包容量減去w[ i ],此時的價值增加v[ i ]。

2、不拿這件物品,揹包容量不變,最大價值不變。

所以可以得到方程

dp[ i ][ j ] =  max( dp[ i-1 ][ j ], dp[ i -1] [ j-w[ i ] ] +v[ i ] );

dp[ i ][ j ] 表示 前 i件物品 ,裝入揹包容量 為 j 的最大價值。

所以可以的到code:

for(int i=1; i<=n; i++)  else

dp[i][j]=dp[i-1][j];

} }

另一種形式表示:

一維陣列

dp[ i ] :表示揹包容量為 i 時的最大價值

for(int i=1; i<=n; i++) 

}

完全揹包 - 與01揹包的區別在於 他的物品數量沒有限制。

此時可以這樣寫

for(int i=1; i<=n; i++) 

}

動態規劃 01揹包 完全揹包

有一類動態規劃可解的問題,它可以描述稱為若干有序的階段,且每個階段的狀態只和上乙個階段的狀態有關,一般把這類問題稱為多階段規劃問題。01揹包問題描述如下 有 n 件物品,每件物品的重量為 w i 價值為 c i 現有乙個容量為 v 的揹包,問如何選取物品放入揹包,使得揹包內物品的總價值最大。其中每種...

動態規劃揹包問題 完全揹包

問題描述 有n種物品,每種均有無窮多個。第i個物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包中,使得揹包內物品在總體積不超過c的前提下重量盡量大。問題分析 開乙個陣列f i j 表示前i種物品中選取若干件物品放入剩餘空間為j的揹包中所能得到的最大重量。每種物品無窮個,所以還要有乙個k遍歷...

動態規劃 揹包問題 完全揹包

有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。第i種物品的費用是w i 價值是v i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。貪心 y or n 因為每件物品都可以選取任意件,你也許會想到貪心演算法 選取價值最高的就好了 看上去沒什麼毛病,但是有乙個問題...