贪心1--排队打水问题

一、心得

 

二、题目及分析

 

题目意思:有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

分析:看题目意思,要使每个人平均等待时间最小,当然是接水时间小的排在前面了,因此解法如下。

1、读入n个人接水时间。

2、对等待时间A数组进行排序,序号数组B同时进行排序。这里数据n为20000,因此,必须用快排才行,同时要注意的是,排序的时候要注意等待时间是一样的时候,序号前的要排在前面,所以要用到双关健排序。

3、对每个接水时间T进行累加S即S:=s+a[i],就是下一个人的等待时间了。对每个等时间S进行累加ZS,ZS就总等待时间了。

三、代码及结果

代码中的n为100

 



1 #include <iostream>
2 #include <cstring>
3 #include <algorithm>
4 using namespace std;
5 int main(){
6 int n,r;
7 cin>>n>>r;
8 int a[100];
9 for(int i=1;i<=n;i++){
10 cin>>a[i];
11 }
12 sort(a+1,a+n+1);
13
14 //水龙头
15 int tap[100];
16 memset(tap,0,sizeof(tap));
17 int j=1;
18 int sum=0;
19 for(int i=1;i<=n;i++){
20 if(j==r+1) j=1;
21 tap[j]+=a[i];
22 sum+=tap[j];
23 j++;
24 }
25 cout<<sum<<endl;
26 return 0;
27 }


贪心1--排队打水问题_微信


我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: ​​fanrenyi.com​​;有各种前端、后端、算法、大数据、人工智能等课程。

​版权申明:欢迎转载,但请注明出处​

一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。

博主25岁,前端后端算法大数据人工智能都有兴趣。