初夏小談 動態規劃解決 01揹包問題

2021-09-26 19:20:17 字數 1299 閱讀 9666

利用動態規劃進行解決,動態規劃的思想就是將大問題化為小問題,求出小問題的解已備在解決大問題中進行使用,而不需要重複計算的方法。即:最優子結構+重疊子問題。動態規劃解決問題:兩本質三特點四要素。

本質:對問題狀態的定義。狀態轉移方程的定義。

特點:將乙個大問題分割成n個相似小問題。n個小問題只需計算一次。儲存n個小問題的解。

要素:狀態的定義,狀態轉移方程的狀態變化定義,狀態初始化,狀態結果。

題目描述有 kindcount個物品和乙個大小為

packsize

的揹包. 給定陣列 kindg表示每個物品的大小和陣列 kindv

表示每個物品的價值

.問最多能裝入揹包的總價值是多大

?

解題思路:利用動態規劃進行劃分為小問題即從當只有乙個大小揹包乙個物品時開始進行判斷。如果可以放進去,便需要計算放進去與不放進去的時兩者中哪乙個最大便取其最大的,如果不放就是它的包大小-1的上乙個最大最大價值,放就是包大小-放入這個物品的大小時的最大價值+該物品的最大價值。以此類推。將小問題遞推為最終的大問題。

**實現:

#include#include#includeusing namespace std;

void dispose(int& packsize, int& kindcount, vector& kindg, vector& kindv)

else//如果可以裝進去

}} cout << "揹包大小為: " << packsize << " 所能裝的最大價值是: " << disposetable[kindcount][packsize] << endl;

}int main()

for (int i = 0; i < kindcount; i++)

if (packsize > 0 && kindcount > 0)

}return 0;

}​

**執行:

珍&原始碼

利用0 1揹包問題談動態規劃

維基百科的定義 動態規劃的本質,是對問題狀態的定義和狀態轉移方程的定義。引自維基百科 dynamic programming is a method forsolving acomplex problem bybreaking itdown into acollection of r subprob...

動態規劃解決01揹包問題

0 1揹包 動態規劃 問題描述 給定n種物品和一揹包。物品i的重量是wi,其價值是vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?問題分析 對於一種問題,要麼裝入揹包,要麼不裝。所以對於一種物品的裝入狀態可以取0和1。eg 物品個數n 5,物品重量w n 物品價值v...

動態規劃解決0 1揹包問題

把揹包問題抽象化 x1,x2,xn,其中 xi 取0或1,表示第 i 個物品選或不選 vi表示第 i個物品的價值,wi表示第 i 個物品的體積 重量 建立模型,即求max v1x1 v2x2 vnxn 約束條件,w1x1 w2x2 wnxn定義v i,j 當前揹包容量 j,前 i 個物品最佳組合對應...