问题描述
有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?
输入格式
第一行n,r (n<=500,r<=75)
第二行为n个人打水所用的时间Ti (Ti<=100);
输出格式
最少的花费时间
样例输入
3 2
1 2 3
样例输出
7
优秀程序员=代码能力+健康身体+英语+经济学通识+大局观
关注我,与你一同分享。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
using namespace std;
//bool cmp(int a,int b){
// return a>b;
//}
int main()
{
int n,r,a[505];
cin>>n>>r;
int sum=0;
priority_queue<int,vector<int>,greater<int> > q;//方便不断取最早结束的
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
if(q.size()<r){//自来水位置没用完的时候
q.push(a[i]);
sum=sum+a[i];
}
else//不断找最先结束的
{
int x=q.top();
q.pop();
x=x+a[i];
q.push(x);
sum=sum+x;
}
}
printf("%d\n",sum);
return 0;
}