洛谷 1757 通天之分組揹包 分組揹包

2022-07-23 17:18:16 字數 692 閱讀 9214

【題意】

n件物品,揹包可容納重量為m的物品

每件物品有重量wi,價值vi,所屬組別gi

同個組中的物品只能拿一件

問最大價值

【題解】

正常01揹包的寫法是

for i 列舉每個物品

for j 倒序列舉揹包容量

f[j]=max(f[j], f[j-w[i]]+v[i])

在分組揹包中,同個組中的物品互斥只能拿一件。 可以把每個組看成01揹包的物品,「組」有多個重量和價值,可以從中任選一組(wi, vi) 來更新答案

那麼寫法可以改成

for i 列舉每個組

for j 倒序列舉揹包容量

for k 列舉組內的物品

f[j]=max(f[j], f[j-w[k]]+v[k])

#include#include#include#include#define n 1010

using namespace std;

int n,m,k,f[n];

struct rec;

vectorobject[n];

inline int read()

int main()

for(int i=1;i<=k;i++)}}

printf("%d\n",f[m]);

return 0;

}

洛谷 P1757 通天之分組揹包

直達通天路 小a歷險記第二篇 自01揹包問世之後,小a對此深感興趣。一天,小a去遠遊,卻發現他的揹包不同於01揹包,他的物品大致可分為k組,每組中的物品相互衝突,現在,他想知道最大的利用價值是多少。輸入格式 兩個數m,n,表示一共有n件物品,總重量為m 接下來n行,每行3個數ai,bi,ci,表示物...

洛谷P1757 通天之分組揹包

直達通天路 小a歷險記第二篇 自01揹包問世之後,小a對此深感興趣。一天,小a去遠遊,卻發現他的揹包不同於01揹包,他的物品大致可分為k組,每組中的物品相互衝突,現在,他想知道最大的利用價值是多少。輸入格式 兩個數m,n,表示一共有n件物品,總重量為m 接下來n行,每行3個數ai,bi,ci,表示物...

洛谷P1757 通天之分組揹包

題目鏈結 通天之分組揹包 解題思路 典型的分組揹包問題 for 所有的組k for v v.0for 所有的i屬於組k f v max 同樣的三重迴圈,不過在輸入時需要記錄組數z 陣列t用來記錄每組有幾件物品 二維陣列s記錄每組第i件物品的的序號 附上 include using namespace...