分組揹包問題

2021-09-08 08:40:21 字數 1511 閱讀 7864

有 n

nn 組物品和乙個容量是 v

vv 的揹包。

每組物品有若干個,同一組內的物品最多只能選乙個。

每件物品的體積是 vij

v_vi

j​,價值是 wij

w_wi

j​,其中 i

ii 是組號,j

jj 是組內編號。

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

輸出最大價值。

輸入格式

第一行有兩個整數 n

nn,v

vv,用空格隔開,分別表示物品組數和揹包容量。

接下來有 n

nn 組資料:

每組資料第一行有乙個整數 s

is_i

si​,表示第 i

ii 個物品組的物品數量;

每組資料接下來有 s

is_i

si​ 行,每行有兩個整數 vij

v_vi

j​,w ij

w_wi

j​,用空格隔開,分別表示第 i

ii 個物品組的第 j

jj 個物品的體積和價值;

輸出格式

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

資料範圍

0

<

0<

0<

n,v≤

100≤100

≤100

0

<

0<

0<

s_i≤

100≤100

≤100

0

<

0<

0<

v_,

,,w_≤

100≤100

≤100

輸入樣例

3 5

21 2

2 41

3 41

4 5

輸出樣例:

8
乙個組有s個物品,則該組有s+1種選擇:選0個~選s個

需要找到每個組的最優解,在01揹包迴圈中的最裡層再加一層迴圈,找到最優解

for

(int i =

0; i < n; i ++

)for

(int j = m; j >= v; j --

)f[j]

= max

#include

#include

using namespace std;

const

int n =

110;

int n, m;

int f[n]

,v[n]

, w[n]

;int

main()

cout << f[m]

<< endl;

return0;

}

分組揹包問題

有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔開,分別表...

分組揹包問題

分組揹包問題 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空...

分組揹包問題

分組揹包問題 已知乙個體積為m的揹包,共有n種物品,每一種物品有s個,每個的體積v和權值w不一定相同,要求從每一種物品中選某件物品,使得在總體積不超過m的情況下,所選的總權值最大。如下 已優化成一維滾動陣列 include include define n 110 using namespace s...