動態規劃 01揹包問題

2022-01-16 04:34:42 字數 2001 閱讀 7140

1)  動態規劃(dynamic programming)演算法的核心思想是:將大問題劃分為小問題進行解決,從而一步步獲取最優解的處理演算法

2)  動態規劃演算法與分治演算法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。

3)  與分治法不同的是,適合於用動態規劃求解的問題,經分解得到子問題往往不是互相獨立的。 ( 即下乙個子階段的求解是建立在上乙個子階段的解的基礎上,進行進一步的求解 )

4)  動態規劃可以通過填表的方式來逐步推進,得到最優解.

技巧:用乙個**來寫出推算過程!!!

揹包問題:有乙個揹包,容量為 4 磅 , 現有如下物品

要求達到的目標為裝入的揹包的總價值最大,並且重量不超出

要求裝入的物品不能重複

揹包問題主要是指乙個給定容量的揹包、若干具有一定價值和重量的物品,如何選擇物品放入揹包使物品的價值最大。其中又分01揹包完全揹包(完全揹包指的是:每種物品都有無限件可用)

這裡的問題屬於01揹包,即每個物品最多放乙個。而無限揹包可以轉化為 01 揹包。

演算法的主要思想,利用動態規劃來解決。每次遍歷到的第 i 個物品,根據 w[i]和 v[i]來確定是否需要將該物品放入揹包中。即對於給定的 n 個物品,設 v[i]、w[i]分別為第 i 個物品的價值和重量,c 為揹包的容量。再令 v[i][j] 表示在前 i 個物品中能夠裝入容量為 j 的揹包中的最大價值。

說明:(i是商品座標,j是揹包容量迭代的)

1   v[j][0]=v[0][j]=0

2 w[i]>j,v[i][j]=v[i-1][j]

3 j>w[i],v[i][j]=math.max(v[i-1][j],val[i]+v[i-1][j-w[i]]

package

com.edu.algorithm.動態規劃;

/*** * 使用動態規劃解決揹包問題[i是商品座標][j是揹包容量迭代的]

* 公式:1.v[j][0]=v[0][j]=0

* 2.w[i]>j,v[i][j]=v[i-1][j]

* 3.j>w[i],v[i][j]=math.max(v[i-1][j],val[i]+v[i-1][j-w[i]])

* *

* @作者 five-five

* @建立時間 2020/9/1 */

public

class

揹包問題 ;

int val = ;//

就是v[i]

int max = 4;

//建立二維陣列

int v = new

int[w.length+1][max+1];//

可以不初始化第一行和第一列

for (int i = 0; i < v.length; i++)

for (int i = 0; i < v[0].length; i++)

//根據公式動態規劃

for (int i=1;i)

else}}

//列印一下

for (int

i:v)

else

system.out.print(j+"\t");

}system.out.println();}}

}

動態規劃揹包問題 01揹包

問題描述 n種物品,每種乙個。第i種物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包,使得揹包內物品不超過c的前提下,重量最大。問題分析 宣告乙個f n c 的陣列。f i j 表示把前i件物品都裝到容量為j的揹包所獲得的最大重量。當 j v i 時,揹包容量不足以放下第 i 件物品,f ...

動態規劃 揹包問題 01揹包

有n種物品和乙個容量為v的揹包,每種物品僅用一次。第i件物品的費用是w i 價值是v i 求解將哪些物品裝入揹包可使價值總和最大。例如 n 5,v 10 重量 價值 第乙個物品 10 5 第二個物品 1 4 第三個物品 2 3 第四個物品 3 2 第五個物品 4 1 首先我們考慮貪心策略,選取最大價...

0 1揹包問題(動態規劃)

一 問題描述 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。所謂01揹包,表示每乙個物品只有乙個,要麼裝入,要麼不裝入。二 解決方案 考慮使用動態規劃求解,定義乙個遞迴式 opt i v 表示前i個物品,在揹包容量大小為v的情況下,最...