描述
有n个人排队到m个水龙头去打水,他们装满水桶的时间t1, t2 , ……, tn为整数且各不相同,应如何安排他们的打水顺序才能使他们花费的总时间最少?
输入
第1行:两个整数n(1<=n<=1000),m(1<=m<=100)。 第2行:n个正整数,t1, t2 , ……, tn,(1<=ti<=1000),表示每个人装满水桶的时间。
输出
1行,一个正整数,表示所有人的花费的最少时间。
样例
输入
4 2 2 6 4 5
输出
23
//排队打水问题(water)
//1个水龙头:从第二个人开始:a[i]=a[i]+a[i-1];
//2个水龙头: 从第三个人开始: a[i]=a[i]+a[i-2];
//3个水龙头:从第四个人开始: a[i]=a[i]+a[i-3];
//r个水龙头:从第r+1个人开始:a[i]=a[i]+a[i-r];
// 1、从小到大排序
// 2、for(r+1->n)每个人的最少用时 a[i]=a[i]+a[i-r]
// 3、求和
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,r,a[1010],s=0;
cin>>n>>r;
for(int i=1; i<=n; i++){
cin>>a[i];
}
sort(a+1,a+n+1);
/*
for(int i=1; i<=n; i++){
cout<<a[i]<<" ";
}
*/
for(int i=r+1; i<=n; i++){
a[i]=a[i]+a[i-r];
}
for(int i=1; i<=n; i++){
s+=a[i];
}
cout<<s;
return 0;
}