问题描述
有个人排队到个水龙头去打水,他们装满水桶的时间为整数,应如何安排他们的打水顺序才能使每个人花费的时间的总和最少?
输入格式
第一行
第二行为个人打水所用的时间
输出格式
一个整数,最少花费的总时间
样例输入 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<iostream>
#include<algorithm>
using namespace std;
int n,r,a[1010],sum[1010],ans;
int main(){
cin>>n>>r;
for(int i=1;i<=n;i++){
scanf("%d",&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]=sum[j]+a[i];
ans=ans+sum[j];
}
cout<<ans;
}