码迷,mamicode.com
首页 > 其他好文 > 详细

贪心1--排队打水问题

时间:2017-07-07 10:04:41      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:center   stream   pac   code   ret   image   意思   cout   分享   

贪心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--排队打水问题

标签:center   stream   pac   code   ret   image   意思   cout   分享   

原文地址:http://www.cnblogs.com/Renyi-Fan/p/7130168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!