有 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 ≤ 10000 < vi,wi ≤ 1000
−1 ≤ si ≤ 1000
輸入樣例預備題目:01揹包問題、完全揹包問題、多重揹包問題(+二進位制優化)。4 51 2 -1
2 4 1
3 4 0
4 5 2
輸出樣例
8
題目分析:
只要上面三個題目都會了,那這個題就沒有什麼難度了。對於不同的方式,用相應的解法就行了,如果**有不懂的,**不懂看相應的題目就行。
注意:因為資料範圍是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 行,每行三個整數 ...