题目描述:
有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