题目描述
南宋吴自牧《梦梁录》载:“此月八日,寺院谓之腊八。大刹等寺,俱设五味粥,名曰腊八粥。”
今年的腊月初八,小Y要给全家人熬制一锅腊八粥,于是小Y去菜市场采购了很多食材,包括桂圆、薏米、花生、莲子、糯米等等,一共 n n n 种食材,每种食材都有各自的份量。这锅腊八粥中的食材比例需要保持均衡,具体来说就是任意两种食材的份量相差最多不能超过 k k k。并且小Y一家都是大胃王,所以小Y还希望这锅腊八粥的份量能够尽可能多。
每种食材不一定要全部煮完,但需要保证每种都有。
请你帮小Y计算,他最多可以熬制多少份量的腊八粥。
输入格式
第一行两个数字 n , k n, k n,k ,表示食材的种数与份量的最大差值。
第二行是 n n n 个整数,其中 a i a_i ai 表示第 i i i 种食材的初始份量。
输出格式
一个整数,表示小Y可以熬制的最多份量。
样例输入 1
3 1
1 2 3
样例输出 1
5
样例输入 2
5 2
7 4 5 9 6
样例输出 2
27
样例输入 3
9 17
45 13 28 16 17 109 81 66 37
样例输出 3
224
数据范围
测试点编号 | n n n |
---|---|
1 ∼ 12 1\sim 12 1∼12 | 1 ≤ n ≤ 1 0 3 1\leq n\leq 10^3 1≤n≤103 |
13 ∼ 20 13\sim 20 13∼20 | 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105 |
- 对于所有的测试点,均有 1 ≤ k , a i ≤ 1 0 4 1\leq k, a_i \leq 10^4 1≤k,ai≤104。
解析
以最少的材料为基准,其他材料取最少材料+k和材料分量的最小值,详见代码:
#include<bits/stdc++.h>
using namespace std;
int n, k;
int a[100005];
int ans = 0;
int main() {
cin >> n >> k;
for(int i = 1; i <= n; i++) { //输入
cin >> a[i];
}
sort(a + 1, a + n + 1); //排序
for(int i = 1; i <= n; i++) {
ans += min(a[i], a[1] + k); //取自己和a[1](最少的材料分量)+k的最小值
}
cout << ans;
return 0;
}