Problem Description
ACdream王国的花店只有一家,所以大家想买花来装饰,店主为了防止有人恶意囤积鲜花来抬高物价(就是黄牛党啦~),于是就定下一个规矩:你买得越多,下一次买的单价就越贵!假设一个人已经购买了x朵鲜花,那么下一次购买第i朵鲜花的单价就是(x+1)*c[i],其中c[i]是一个店主为每一朵花的基本定价。
ACdream学校想开运动会,需要n朵鲜花来装饰,于是你和你的小伙伴总共m个人就得想办法花最少的钱去完成任务。请问机智的你最少需要花费多少钱呢?
Input
多组数据,每组数据首先是两个正整数,n(1<=n<=100),m(1<=m<=100)然后是n个整数c[i],(1<=c[i]<=10^6)
Output
对于每组数据,输出一个整数,表示你需要花费的最少价格。
代码
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n, m, A[105];
while (scanf("%d%d", &n, &m) != EOF) {
for (int i = 0; i < n; i++)
scanf("%d", &A[i]);
sort(A, A + n);
int ans = 0, cnt = 0;
for (int i = n - 1; i >= 0; i--) {
ans += A[i] * (cnt / m + 1);
cnt++;
}
printf("%d\n", ans);
}
return 0;
}
时间: 2024-11-02 19:17:13