Acwing 混合揹包

2021-10-03 11:03:45 字數 1097 閱讀 1641

有 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...