测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A50000. 糖果

填空题 较难

题目描述

糖果

题目描述

由于在维护世界和平的事务中做出巨大贡献,Dzx被赠予糖果公司2010年5月23日当天无限量糖果免费优惠券。在这一天,Dzx可以从糖果公司的N件产品中任意选择若干件带回家享用。糖果公司的N件产品每件都包含数量不同的糖果。Dzx希望他选择的产品包含的糖果总数是K的整数倍,这样他才能平均地将糖果分给帮助他维护世界和平的伙伴们。当然,在满足这一条件的基础上,糖果总数越多越好。Dzx最多能带走多少糖果呢?

注意:Dzx只能将糖果公司的产品整件带走。

输入

第一行包含两个整数N(1≤N≤100)和K(1≤K≤100)。

以下N行每行1个整数,表示糖果公司该件产品中包含的糖果数目,不超过1000000。

输出

符合要求的最多能达到的糖果总数,如果不能达到K的倍数这一要求,输出0。

输入样例

5 7

1

2

3

4

5

输出样例

14

参考答案

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 1001 #define MOD 2520 #define E 1e-12 using namespace std; int a[N]; int f[N][N]; int main() { int n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<k;i++) f[0][i]=-INF; for(int i=1;i<=n;i++) for(int j=0;j<k;j++) f[i][j]=max(f[i-1][j],f[i-1][(k+j-a[i]%k)%k]+a[i]); cout<<f[n][0]<<endl; return 0; }
上一题 下一题