acwing 2 01揹包問題

2021-10-10 22:46:51 字數 955 閱讀 8822

有 n 件物品和乙個容量是 v的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且價值最大。輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i件物品的體積和價值。

輸出格式

輸出乙個整數,表示最大價值。

資料範圍

0輸入樣例

4 51 2

2 43 4

4 5輸出:

思路:動態規劃

1.狀態表示f[i,j]——(1)集合:所有只考慮前i個物品,且總體積不大於j的所有選法; (2)屬性:max

2.狀態計算——集合的劃分

樸素做法:

//動態規劃:分解為求子問題的最優解

//

#include using namespace std;

const int n = 1010;

int f[n][n]; //狀態表示:集合f[i][j]——前i個物品且總體積不大於j的最大價值(c++全域性變數會初始化為0)

int w[n],v[n]; //體積 和 價值

int main()

//f[0][0] 已經自動為0了,不用再寫了

//下面可以理解成打表

for (int i = 1; i <= n ; ++i) }}

cout《優化

//思路和上面的一致

#includeusing namespace std;

const int n=1010;

int f[n];

int v[n],w[n];

int main()

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

}cout<}

AcWing 2 01揹包問題

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

acwing 2 01揹包問題

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

acwing2 01揹包問題

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