dp做題的步驟
>
1. 確定狀態變數 dp[i]
/dp[i]
[j]的含義;
>
2. 確定狀態轉移方程;
>
3. 確定邊界條件;
>
4. 確定遞推順序
題目1:01揹包
有思路n
個重量和價值分別為w
和v
的物品。從這些物品中挑選總重量不超過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
個重量和價值分別為w
和v
的物品。從這些物品中挑選總重量不超過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揹包問題的最優解以及解組成,然後編...