【問題描述】
乙個旅行者有乙個最多能裝v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,···,wn,它們的價值分別是c1,c2,···,cn。這些物品被劃分為若干組,每組中的物品互相衝突,最多選一件。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
【輸入格式】
第1行:三個整數,v(揹包容量,v<=200),n(物品數量,n<=30)和t(最大組號,t <= 10);
第2至n+1行:每行三個整數wi,ci,p,表示每個物品的重量、價值、所屬組號。
【輸出格式】
僅一行,乙個數,表示最大總價值。
【輸入樣例】
10 6 3
2 1 1
3 3 1
4 8 2
6 9 2
2 8 3
3 9 3
【輸出樣例】
【題解】
對於每乙個組而言,只有選其中乙個或者全不選。
列舉每一組,然後列舉容量,最後列舉該組中的所有物品。這樣可以做到每組中的物品只會被選一次。
這裡和0/1揹包的差別就是,0/1揹包是列舉單個物品,對單個物品都進行考慮是否要拿。而分組揹包,則是在組的前提下,對每個組內的物品進行決策,就是說把每個物品都放一下看看在j容量時,哪乙個更優。
f[j]表示容積不超過j時,物品所能獲得的最大收益。
【**】
#include #include int v,n,t,w[50],c[50],a[15][50],f[250];
void input_data()
}void get_ans() }
void output_ans()
int main()
分組揹包 Acwing 9 分組揹包問題
題目鏈結 有 n 組物品和乙個容量是 v 的揹包。每組物品有若干個,同一組內的物品最多只能選乙個。每件物品的體積是 vij,價值是 wij,其中 i 是組號,j 是組內編號。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行有兩個整數 n,v,用空格隔...
揹包九講 6 分組揹包
問題引入 有 n nn 組物品和乙個容量是 v vv 的揹包 每組物品有若干個,同一組內的物品最多只能選乙個 每件物品的體積是 vi,jv vi,j 價值是 wi,jw wi,j 其中 i ii 是組號,j jj 是組內編號 求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大,輸出最...
hdu 1712 分組揹包
分組的揹包問題 問題 有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 這些物品被劃分為若干組,每組中的物品互相衝突,最多選一件。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。演算法 這個問題變成了每組物品有若干種策略 是選擇本組的某一件,還是一件...