核心:狀態轉換方程
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 行,...