C排队打水 | ||
|
问题描述
有个人排队到个水龙头去打水,他们装满水桶的时间为整数,应如何安排他们的打水顺序才能使每个人花费的时间的总和最少?
输入格式
第一行
第二行为个人打水所用的时间
输出格式
一个整数,最少花费的总时间
样例输入 1
3 2
1 2 3
样例输出 1
7
样例输入 2
4 2
2 6 4 5
样例输出 2
23
提示
样例1说明:
第1,2两人在1号龙头接水,2排1后。
第1个人接水,耗时1
第2个人排队耗时1,接水耗时2,总耗时3
第2个人在2号龙头接水,耗时3
总耗时1+3+3=7
#include<bits/stdc++.h>
using namespace std;
int n,r,a[1005],sum[105],ans=0;
int main(){
cin>>n>>r;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1,j=0;i<=n;i++){
j++;
if(j==r+1) j=1;
sum[j]+=a[i];
ans+=sum[j];
}
cout<<ans;
return 0;
}