慶功會 多重揹包問題c

2021-07-10 01:12:10 字數 1070 閱讀 8501

慶功會

【問題描述】 w

為了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功

會,為此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,

可以補充他們的精力和體力。

【輸入格式】 w

第一行二個數

n(n<=500)

,m(m<=6000)

,其中n

代表希望購買的獎品的種數,m

表示撥款金額。 w

接下來n

行,每行

3個數,v、

w、s,分別表示第

i種獎品的**、價值(**

與價值是不同的概念)和購買的數量(買0

件到s件均可),其中

v<=100

,w<=1000

,s<=10。

【輸出格式】 w

第一行:乙個數,表示此次購買能獲得的最大的價值(注意!不是**)。

【輸入樣例】 w

5 1000 w

80 20 4 w

40 50 9 w

30 50 7 w

40 30 6 w

20 20 1

【輸出樣例】 w

1040

這道題很明顯是乙個多重揹包問題,v為體積,w為**,s為最大購買數

多重揹包問題和01揹包及完全揹包的區別在於,每種物品的數量是固定的,因此我們可以將它轉化成01揹包問題,只是多一重迴圈k,用來表示第i種物品在j容量下的的數量。所以方程就是(這裡直接用空間優化方程)f[j]=max(f[j],f[j-k*v[i]]+k*w[i])

01揹包問題,不要忘了j的迴圈順序是由大到小的,以及j-k*v[i]恆大於0

程式~~

#include#includeusing namespace std;

int m,n,v[501],w[501],s[501],f[6001];

int max(int a,int b)

int main()

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

return 0;

}

ssl2289 慶功會 多重揹包

慶功會time limit 10000ms memory limit 65536k total submit 235 accepted 94 case time limit 1000ms description 為了慶賀班級在校運動會上取得第一名的成績,班主任決定開一場慶功會,為此拔款購買獎品獎勵運...

慶功會 解題報告(多重揹包模板)

problem description 為了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功會,為此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,可以補充他們的精力和體力。input 對於每組資料的第一行二個數n n 500 m m 6000 其中n代表希望購買的獎品的種數,...

DP 多重揹包 慶功會 HUSTOJ2821

為了慶賀班級在校運動會上取得全校第一名成績,班主任決定開一場慶功會,為此撥款購買獎品犒勞運動員。期望撥款金額能購買最大價值的獎品,可以補充他們的精力和體力。第一行二個數n n 500 m m 6000 其中n代表希望購買的獎品的種數,m表示撥款金額。接下來n行,每行3個數,v w s,分別表示第i種...