SSL 2291分組揹包

2021-10-11 21:34:21 字數 1195 閱讀 1792

time limit:1000ms

memory limit:65536k有n件物品和乙個容量為v的揹包。第i件物品的費用是c[i],價值是w[i]。這些物品被劃分為若干組,每組中的物品互相衝突,最多選一件。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

第一行:三個整數,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

每組物品有若干種策略:是選擇本組的某一件,還是一件都不選。

設f[i][j]表示前i組物品花費空間j能取得的最大權值。

f[i][j]=max(f[i-1][j],f[i-1][j-w[k]]+c[k])(物品k屬於組i)。

可以將二維壓縮成一維

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

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

long

long v,n,t,f[

1010][

1010

],head[

1010];

struct jgt

;jgt a[

1010];

bool

cmp(jgt t1,jgt t2)

void

input()

}return;}

voiddp(

)if(a[k]

.w<=j&&a[k]

.p!=a[k+1]

.p) f[i]

[j]=

max(f[i]

[j],f[i-1]

[j-a[k]

.w]+a[k]

.c);}}

}return;}

intmain()

6666 分組揹包

問題描述 乙個旅行者有乙個最多能裝v公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,wn,它們的價值分別是c1,c2,cn。這些物品被劃分為若干組,每組中的物品互相衝突,最多選一件。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。輸入格式 第1行 三個整數,v 揹...

分組揹包 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 是組內編號 求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,且總價值最大,輸出最...