01揹包演算法

2021-09-10 13:20:58 字數 1428 閱讀 2033

核心:狀態轉換方程

01揹包問題

容量為10的揹包,有5種物品,每種物品只有乙個,其重量分別為5,4,3,2,1,其價值分別為1,2,3,4,5。 

設計演算法,實現揹包內物品價值最大。 

**如下(輸出14)

#include #include using namespace std;

int main() 

;    int v[6] = ;

int dp[11] = ;

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

for (int j = 10; j >= w[i]; j--)

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

cout << "總的價值為: " << dp[10] << endl;

return 0;

}

完全揹包問題

容量為10的揹包,有5種物品,每種物品數量無限,其重量分別為5,4,3,2,1,其價值分別為1,2,3,4,5。 

設計演算法,實現揹包內物品價值最大。 

**如下(輸出50)

#include #include using namespace std;

int main() 

;    int v[6] = ;

int dp[11] = ;

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

for (int j = w[i]; j <= 10;j++)

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

cout << "總的價值為: " << dp[10] << endl;

return 0;

}

多重揹包問題

容量為10的揹包,有5種物品,每種物品數量分別為1,2,1,2,1,其重量分別為5,4,3,2,1,其價值分別為1,2,3,4,5。 

設計演算法,實現揹包內物品價值最大。 

**如下(輸出16)

#include #include using namespace std;

int main()

;    int v[6] = ;

int cot[6] = ;

int dp[11] = ;

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

for (int k = 1; k <= cot[i];k++)

for (int j = 10; j >= w[i]; j--)

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

cout << "總的價值為: " << dp[10] << endl;

return 0;

}

演算法 01揹包

揹包最大容量10,有以下5個商品及其價值,試求揹包所能容納的最大價值。序號1 2345 重量226 54價值6 3546 如下 include include define max v 100 using namespace std struct good 動態規劃求解 n 商品個數 m 揹包最大重...

01揹包演算法

01揹包問題 動態規劃的基本思想 動態規劃演算法可分解成從先到後的4個步驟 1.描述乙個最優解的結構,尋找子問題,對問題進行劃分。2.定義狀態。往往將和子問題相關的各個變數的一組取值定義為乙個狀態。某個狀態的值就是這個子問題的解 若有k個變數,一般用k維的陣列儲存各個狀態下的解,並可根 據這個陣列記...

演算法(揹包問題 01揹包問題)

01揹包問題 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,...