P1757 通天之分組揹包

2022-08-09 10:39:11 字數 1044 閱讀 9805

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,表示物...