由於在維護世界和平的事務中做出巨大貢獻,dzx被贈予糖果公司2023年5月23日當天無限量糖果免費優惠券。
在這一天,dzx可以從糖果公司的 n 件產品中任意選擇若干件帶回家享用。
糖果公司的 n 件產品每件都包含數量不同的糖果。
dzx希望他選擇的產品包含的糖果總數是 k 的整數倍,這樣他才能平均地將糖果分給幫助他維護世界和平的夥伴們。
當然,在滿足這一條件的基礎上,糖果總數越多越好。
dzx最多能帶走多少糖果呢?
注意:dzx只能將糖果公司的產品整件帶走。
輸入格式
第一行包含兩個整數 n 和 k。
以下 n 行每行 1 個整數,表示糖果公司該件產品中包含的糖果數目,不超過 1000000。
輸出格式
符合要求的最多能達到的糖果總數,如果不能達到 k 的倍數這一要求,輸出 0。
資料範圍
1≤n≤100
,1≤k≤100
,
輸入樣例:
571
2345
輸出樣例:
14
樣例解釋
dzx的選擇是2+3+4+5=14,這樣糖果總數是7的倍數,並且是總數最多的選擇。
定義狀態為f[i
][j]
f[i][j]
f[i][j
]表示從前i個物品裡選,%k為j的方案
屬性:max
目標:f[n][0]
狀態轉移
f [i
][j]
=max
(f[i
−1][
j−1]
,f[i
−1][
(j−a
[i]%
k+k)
%k)+
w[i]
)f[i][j]=max(f[i-1][j-1],f[i-1][(j-a[i]\%k+k)\%k)+w[i])
f[i][j
]=ma
x(f[
i−1]
[j−1
],f[
i−1]
[(j−
a[i]
%k+k
)%k)
+w[i
])注意上面式子裡的取模運算,防止出現負數
#include
using
namespace std;
int t,n;
const
int n=
110,inf=
0x3f3f3f3f
;typedef
long
long ll;
int a[n]
,f[n]
[n];
intmain()
}printf
("%d"
,f[n][0
]);return0;
}
01揹包(多個揹包的組合)
kkksc03的大學生活非常的頹廢,平時根本不學習。但是,臨近期末考試,他必須要開始抱佛腳,以求不掛科。這次期末考試,kkksc03需要考4科。因此要開始刷習題集,每科都有乙個習題集,分別有s1,s2,s3,s4道題目,完成每道題目需要一些時間,可能不等 a1.as1,b1.bs2,c1.cs3,d...
揹包型動態規劃 揹包問題1
在n個物品中挑選若干物品裝入揹包,最多能裝多滿?假設揹包的大小為m,每個物品的大小為a i 示例 樣例 1 輸入 3,4,8,5 backpack size 10 輸出 9 樣例 2 輸入 2,3,5,7 backpack size 12 輸出 12 首先要明確一點,在揹包問題中,陣列大小和總稱重有...
揹包型動態規劃 揹包問題3
給定n種物品,每種物品都有無限個.第i個物品的體積為a i 價值為v i 再給定乙個容量為m的揹包.問可以裝入揹包的最大價值是多少?樣例 1 輸入 a 2,3,5,7 v 1,5,2,4 m 10 輸出 15 解釋 裝入三個物品 1 a 1 3,v 1 5 總價值 15.樣例 2 輸入 a 1,2,...