b就是在01揹包的基礎上對每個物品新增了組數,就變成了分組揹包。
考慮到01揹包的狀態轉移方程dp[j]=max(dp[j],dp[j-a[i]]+b[i]),分組揹包和它相同.
那麼怎麼填這個表呢,在01揹包中,通過倆層for迴圈來實現,第一層for是控制第i到n個拿不拿,在分組揹包中,這個問題就變成了第i個到n組拿不拿。然後套01揹包就可以了。
簡單寫就是for(i,num)//第1組到第num組
for(,)//01揹包
for(,)
需要注意的是確定每個物品的位置,所以需要開個二維陣列來存,f[第幾組][第幾個]
#include #define inf 0x3f3f3f3f#define inf 0x7ffffffffffffffftypedef
long
long
ll;const
double pi=3.1415926535897931
;const
long
long mod=1e9+7
;const
int ma= 1e7+10
;const
int ma= 2*1e6+10
;const
int few=1e3+10
;using
namespace
std;
/////////////////////////////////////////////
/int
dp[ma];
inta[ma];
intb[ma];
intc[ma];
intf[few][few];
intnum;
intcnt[ma];
intmain()
for(int k=1; k<=num; k++)//第1組到第num組
for(int j=m; j>=0; j--)//01揹包
for(int i=1; i<=cnt[k]; i++)
cout
return0;
}
P1757 通天之分組揹包
題目背景 直達通天路 小 a 歷險記第二篇 題目描述 自 01 揹包問世之後,小 a 對此深感興趣。一天,小 a 去遠遊,卻發現他的揹包不同於 01 揹包,他的物品大致可分為 k 組,每組中的物品相互衝突,現在,他想知道最大的利用價值是多少。輸入格式 兩個數 m,n,表示一共有 n 件物品,總重量為...
P1757 通天之分組揹包(分組揹包問題)
題目來自洛谷 p1757 通天之分組揹包 題目背景 直達通天路 小 a 歷險記第二篇 題目描述 自 01 揹包問世之後,小 a 對此深感興趣。一天,小 a 去遠遊,卻發現他的揹包不同於 01 揹包,他的物品大致可分為 k 組,每組中的物品相互衝突,現在,他想知道最大的利用價值是多少。輸入格式 兩個數...
洛谷 P1757 通天之分組揹包
直達通天路 小a歷險記第二篇 自01揹包問世之後,小a對此深感興趣。一天,小a去遠遊,卻發現他的揹包不同於01揹包,他的物品大致可分為k組,每組中的物品相互衝突,現在,他想知道最大的利用價值是多少。輸入格式 兩個數m,n,表示一共有n件物品,總重量為m 接下來n行,每行3個數ai,bi,ci,表示物...