AcWing 2 01揹包問題 DP

2021-10-25 22:20:22 字數 1134 閱讀 5220

題目描述:

有 n 件物品和乙個容量是 v的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。

輸出最大價值。

輸入格式

第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。

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

輸出格式

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

資料範圍

0輸入樣例

451

2243

445

輸出樣例:

8
分析:

狀態表示:f[i][j] 集合: 在前i個物品中挑選總體積不超過j的所有選法的集合 , 屬性 :價值最大

狀態劃分:以第i個物品選不選進行劃分,當選擇第i個物品的時候,子集中的所有選法的價值最大即為f[i-1][j-v[i]] + w[i];當不選擇第i個物品的時候,子集中所有選法的價值最大即為f[i-1][j]。然後整個集合的最大值就為兩者取乙個max即可。

#include

using

namespace std;

const

int n =

1010

;int n , m;

int v[n]

, w[n]

;int f[n]

[n];

intmain()

}

cout << f[n]

[m]<< endl;

}

//i符合滾動陣列,j同時間在一側,所以可以降維。

#include

using

namespace std;

const

int n =

1010

;int n , m;

int v[n]

, w[n]

;int f[n]

;int

main()

ACwing 2 01揹包問題(DP)

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

AcWing 2 01揹包問題

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

acwing 2 01揹包問題

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