題面連線
題面有 \(n\) 種物品和乙個容量是 \(v\) 的揹包。
物品一共有三類:
每種體積是 \(vi\),價值是 \(wi\)。
求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。
輸出最大價值。
輸入格式
第一行兩個整數,n,vn,v,用空格隔開,分別表示物品種數和揹包容積。
接下來有 n 行,每行三個整數 \(vi,wi,si\),用空格隔開,分別表示第 i 種物品的體積、價值和數量。
輸出格式
輸出乙個整數,表示最大價值。
資料範圍
\(0\(0
\(−1≤si≤1000\)
輸入樣例
4 5
1 2 -1
2 4 1
3 4 0
4 5 2
輸出樣例:8
思路
把多重揹包,完全揹包都轉化成01揹包
但是需要進行二進位制優化
**
#include#include#include#include#include#includeusing namespace std;
typedef pairpii;
#define x first
#define y second
const int n=200000;
vectorg;
int f[n];
int n,m;
int main()
); s-=k;
k*=2;
}if(s)
g.push_back();
}else if(s<0)//01揹包);}
else );
s-=k;
k*=2;
}if(s)
g.push_back();}}
for(int i=0;i=g[i].first;j--)
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 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩...