题目:有一栋楼,如今设计一种电梯调度算法:电梯在一楼让大家上电梯,然后依据大家选择要到的楼层算出某一楼层i,电梯在i层停下让全部人下电梯,然后大家爬楼梯达到自己的楼层。请问电梯停在哪一层。能够使得这一次的全部乘客爬楼层之和最短?

(一)

最直接最简单的方法就是直接枚举从第一层到最后一层,然后算出电梯停在哪一层会使得全部乘客爬楼层之和最短。

代码例如以下:

int nPerson[];  //nPerson[i]表示到第i层的乘客的数目
int nFloor = 0, nMinFloor = 0;
int nTargetFloor = -1;
for(int i = 1; i <= N; ++i) {    //N代表楼层的总数for(int j = 1; j < i; ++j) nFloor += nPerson[j] * (i - j);for(int j = i + 1; j <= N; ++j) nFloor += nPerson[j] * (j - i);if(nTargetFloor == -1 || nFloor < nMinFloor) {nMinFloor = nFloor;nTargetFloor = i;}
}

(二)

思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.
         如果有N1个乘客要到达的层数<i,有N2个乘客要到达的层数==i,有N3个乘客要到达的层数>i.
         所以有:
         (1)当电梯改停在i-1,则 Y+(N2+N3-N1)
         (2)当电梯改停在i+1,则 Y+(N1+N2-N3)
         所以当后面那部分的值<0时(如(2)的N1+N2<N3),则加上负数后总的楼梯数比原来的小,即更优解.
         因此,我们能够从第一层開始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.
int nPerson[];  //nPerson[i]表示到第i层的乘客的数目
int nFloor = 0, nMinFloor = 0;
int nTargetFloor = 1;
int N1 = 0, N2 = 0, N3 = 0;
for(N1 = 0, N2 = nPerson[1], N3 = 0, i = 2; i <= n; ++i) {   //n代表楼层的数目N3 += nPerson[i];nMinFloor += nPerson[i] * (i - 1);
}
for(int i = 2; i <= n; ++i) {if(N1 + N2 < N3) {nTargetFloor = i;nMinFloor += (N1 + N2 - N3);N1 += N2;N2 = nPerson[i];N3 -= nPerson[i];}else break;
}

转载于:https://www.cnblogs.com/gccbuaa/p/6872531.html

1.8 小飞的电梯调度算法相关推荐

  1. 编程之美 1.8 小飞的电梯调度算法

    小飞的电梯调度算法 电梯是我们每天都要坐的,上班高峰期是非常拥挤的,大家都不想每层都停,决定选择一层停,剩下的楼层大家自己爬.假设电梯共有N层,坐电梯的人有M人,每个人都有自己的目的层,现在让你设计一 ...

  2. 小飞的电梯调度算法,光影切割问题编程之美

    小飞的电梯调度算法: 1.8问题描述: 小飞是实习程序员,下班高峰期时电梯的每层都有人上下,等电梯是件烦人的事情. 小飞有个方案:电梯每次计算里面的人,和上的楼层,从而统计出在哪一层停,该上楼的出电梯 ...

  3. 编程之美----小飞的电梯调度算法

    原帖地址:http://blog.csdn.net/li4951/article/details/7486092 亚洲微软研究院所在的希格玛大厦一共有6部电梯.在高峰时间,每层都有人上下,电梯每层都停 ...

  4. java 电梯算法_编程之美之小飞的电梯调度算法(多种解法)---Java语言

    1.题目情景 我们假设都是从一楼上电梯的,而至于讯电梯停在其中的某一层.即所有的乘客都从一楼上电梯,到达某层之后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层.在一楼的时候,每个乘客选择自己的目的 ...

  5. 编程之美1.8:小飞的电梯调度算法

    问题:由于楼层并不高,在繁忙时段,每次电梯从一层往上走时,我们只允许停到其中某一层.所有乘客再从这层去往自己的目的楼层. 电梯停在哪一层,能够保证乘客爬楼梯之和最少? import java.util ...

  6. c语言 电梯调度,c语言函数如何返回两个值或多个值(结合 小飞 电梯调度算法)...

    正常思维:使用return 语句,但每调用一次函数 return 语句只能返回一个值 .这是C语言语法规则. 该怎么实现一个函数返回两个值或是多个值?,可以采用"间接方法".大概有 ...

  7. 电梯调度算法 软工 Pair Project

    软工要求的结对编程,随机分组,然后,我(郭立轩)和六班的闫生辉分在了同一组.之前并不认识,虽然如此,这次结对编程的经历还是相当愉快的,也学到了不少东西. OK,下面进入正文 关于结对编程 如何利用结对 ...

  8. 编程之美---小飞的电梯调度问题 1.8 扩展2

    http://blog.163.com/guixl_001/blog/static/41764104201082062317857/ 问题.有一栋楼,一共有N层,要去每一层的人分别是A[1],A[2] ...

  9. 我们的电梯调度算法的独到之处

    我们的算法里,定义了_PassengerQueue专门用于存储乘客发出的方向请求,还定义了一个ArrayList数组_targetOfElev用于存储每个电梯的目标楼层.把每个楼层里发出的方向请求相同 ...

最新文章

  1. 元素序列几个常用排序算法:一
  2. 12.2.12 创建有响应的用户界面 捕获异常
  3. python opencv直方图_【python opencv】直方图均衡
  4. android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时
  5. 11月25号站立会议
  6. 数据存储与传输---编码与解码---硬盘和内存要分清!
  7. Oracle 10gR2 Psu 相关
  8. Linux定时发送arp,linux-networking – Keepalived定期发送免费ARP
  9. 系统学习机器学习之SVM(一)
  10. 将一个数据插入表中前校验数据是否存在
  11. 使用jQuery快速高效制作网页交互特效(1)
  12. 编译原理第四章课后题
  13. 信源编码与信道编码区别(十一)
  14. 短除法对一个数分解质因数
  15. spyder pyecharts不显示_后期剪辑还在升级主机配置?换台京东方显示器才最重要...
  16. 浅谈WMS系统(SAP WMS系统及非SAP的WMS系统)
  17. OC底层 - runtime 一个char变量按位保存多个BOOL变量值
  18. OPENCV CV_64FC1含义
  19. 在深度学习模型的优化上,梯度下降并非唯一的选择
  20. 给你一个赶超三大交易所的机会 | 你好2020

热门文章

  1. 关于curl: (2) Failed Initialization
  2. Java排序算法之——希尔排序
  3. Linux Server - NAT
  4. VS2010配置OpenCV
  5. TensorFlow patch块划分(transpose and reshape)
  6. python引用文件的方法_[项目实践] python文件路径引用的
  7. mybatis的入门
  8. 做个游戏 writeup base64解码网址
  9. c++ 用指针将函数作为参数传参
  10. c#调用Matlab的参数传递