動態規劃(DP)揹包問題

2021-10-25 14:57:40 字數 1252 閱讀 8546

dp做題的步驟

>

1. 確定狀態變數 dp[i]

/dp[i]

[j]的含義;

>

2. 確定狀態轉移方程;

>

3. 確定邊界條件;

>

4. 確定遞推順序

題目1:01揹包

n個重量和價值分別為wv的物品。從這些物品中挑選總重量不超過w的物品。求所有挑選方案中價值總和的最大值

思路

dp[i+1]

[j] 表示從前i個物品中選出總重量不超過j的物品時總價值的最大值;

初始化:dp[0]

[j]=

0,dp[i][0

]=0;

狀態轉移方程:

dp[i+1]

[j]=

1.max

(dp[i]

[j],dp[i]

[j-w[i]

]+v[i])or

2.dp[i]

[j]

題解

void

solve()

}printf

("%d\n"

, dp[n]

[w])

;}

題目2:完全揹包

n個重量和價值分別為wv的物品。從這些物品中挑選總重量不超過w的物品。求所有挑選方案中價值總和的最大值,每種物品可以挑選多件。

思路

**

void

solve()

}printf

("%d\n"

, dp[n]

[w])

;}

DP 動態規劃 揹包問題

將乙個容量為v的揹包,物品有兩個屬性,乙個w和乙個v表示體積和屬性值。每種物品只有乙個。要求裝下盡可能多,求最大價值。轉移狀態方程 dp j max dp dp j list i w list i v,dp j 1 include includeusing namespace std struct ...

DP動態規劃 揹包問題

具體例子 有n個重量和價值分別為wi,vi的物品,從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值。例如 n 4 w,v w 5 dp思想 求出狀態轉移方程,也就是求出遞推式。首先將問題一般化 解決此問題需要2個一維陣列,和1個二維陣列 w i 表示第i個物品的重量,下標從0...

動態規劃 揹包問題(DP系列)

一 問題描述 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?二 總體思路 根據動態規劃解題步驟 問題抽象化 建立模型 尋找約束條件 判斷是否滿足最優性原理 找大問題與小問題的遞推關係式 填表 尋找解組成 找出01揹包問題的最優解以及解組成,然後編...