有 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 次;
輸出格式
輸出乙個整數,表示最大價值。
資料範圍
00−1≤si≤1000
輸入樣例45
12-1
2413
4045
2輸出樣例:
8
題解:
將多重揹包拆分為01揹包,然後進行完全揹包和01揹包操作即可ac**:
#include.h>
using namespace std;
const
int maxn=
4e3+5;
int dp[maxn]
,v[maxn]
,w[maxn]
,s[maxn]
,num[maxn]
,va[maxn]
,k[maxn]
;int
main()
else
if(s[i]
>0)
if(s[i]
>0)
}else
if(s[i]==0
)}for(
int i=
1; i<=cnt; i++
)else
} cout<<}
AcWing 7 混合揹包問題
題目描述 有 n 種物品和乙個容量是 v的揹包。物品一共有三類 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品種數和揹包容積。接下來有 n行,每行三個整數 vi,wi,s...
ACWing 7 混合揹包問題
有n nn種物品和乙個容量是v vv的揹包。物品一共有三類 第一類物品只能用1 11次 0 1 0 10 1揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用s is i si 次 多重揹包 每種體積是v iv i vi 價值是w iw i wi 求解將哪些物品裝入揹包,可使物品體積總和不...
混合揹包 分組揹包
啥是混合揹包呢,就是包含01揹包,完全揹包,多重揹包。有n件物品,揹包承重最大為m,w i 代表重量,v i 代表價值,s i 代表種類。s i 1,可用1次,s i 0,可用無限次,s i 0,可用s i 次.解法 見 const int maxn 1e4 5 int n,m,dp m 1 w n...