题目描述:
有n个人排队到r个水龙头打水,他们装满水的时间为 t1,t2,.........tn为整数且各不相等,
应如何安排他们打水顺序才能使他们花费时间最少(含等待时间)?
【算法分析】
由于排队时,越靠前面的计算次数越多,因此时间越小的排队越靠前得出结果越小,所以可以用贪心算法解答。
步骤如下:
(1)按时间顺序从小到大排序(sort函数);
(2)将排序后的时间按顺序依次放到每个水龙头的队列中;
(3)统计并输出。
————————————————
1 #include <iostream>
2 #include <algorithm>
3 #include <cstring>
4 using namespace std;
5 const int MAXN=1000;
6 int a[MAXN],s[MAXN];
7 int main(){
8 int n,r,j=0,minx=0;
9 memset(s,0,sizeof(s));
10 cin>>n>>r;
11 for(int i=0;i<=n;i++)
12 cin>>a[i];
13 sort(a+1,a+n+1); //对所有的时间排序
14 for(int i=1;i<=n;i++){
15 j++;
16 if(j==r+1)
17 j=1; //前r个人人为一组,第r+1个人回到第一个水龙头
18 s[j]+=a[i]; //加上等待时间
19 minx+=s[j]; //累加
20 }
21 cout<<minx<<endl;
22 return 0;
23 }
相似题目:https://www.luogu.com.cn/problem/P1223
来源:https://www.cnblogs.com/ZKYAAA/p/12370771.html