混合揹包問題

2021-10-05 00:19:08 字數 1374 閱讀 6777

有 n 種物品和乙個容量是 v 的揹包。

物品一共有三類:

第一類物品只能用1次(01揹包);

第二類物品可以用無限次(完全揹包);

第三類物品最多只能用 si 次(多重揹包);

每種體積是 vi,價值是 wi。

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

輸出最大價值。

輸入格式

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

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

si = −1 表示第 i 種物品只能用1次;

si = 0 表示第 i 種物品可以用無限次;

si > 0 表示第 i 種物品可以使用 si 次;

輸出格式

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

資料範圍

0 < n,v ≤ 1000

0 < vi,wi ≤ 1000

−1 ≤ si ≤ 1000

輸入樣例

4 51 2 -1

2 4 1

3 4 0

4 5 2

輸出樣例

8

預備題目:01揹包問題、完全揹包問題、多重揹包問題(+二進位制優化)。

題目分析:

只要上面三個題目都會了,那這個題就沒有什麼難度了。對於不同的方式,用相應的解法就行了,如果**有不懂的,**不懂看相應的題目就行。

注意:因為資料範圍是1000,所以用多重揹包問題的樸素做法有可能會超時,所有多重揹包要加二進位制優化。

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

const

int n=

1005

;int f[n]

;int

main()

else

if(s)}}

cout<<}

混合揹包問題

如果將p01 p02 p03混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?考慮到在p01和p02中給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一次,另一類物品可以取無限次,那麼只需在對每個物...

混合揹包問題

name 混合揹包問題 author 巧若拙 date 07 06 18 09 33 description 混合揹包問題 在n種物品中選取若干件放在容量為c的揹包裡,分別用p i 和w i 儲存第i種物品的價值和重量。有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的...

混合揹包問題

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