电梯调度算法

对于电梯的要求:电梯在一楼出发,待用户输完想停的楼层后,停在其中的一层楼然后所有人下去徒步找各自的目标地,使最后所有人的爬楼梯数最短。

      设最后停在i层,i层下有n1个人,i层有n2个人,i+1层有n3个人,假设停i层为最短Y,若停在i-1层则Y-(n1-n2-n3)停在i+1层则Y-(n3-n1-n2)则n1>n2+n3停在i-1层,n3>n1+n2则电梯停在i+1层合算其余停i。

 1 //电梯算法
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int people[10];
 8     int i;
 9     int n1 = 0;
10     int n2;
11     int n3 = 0;
12     /*int sum;*/
13     for (i = 0; i < 10; i++)
14     {
15         cin >> people[i];
16     /*    sum += people[i];*/
17     }
18     n2 = people[0];
19     for (i = 1; i <= 9; i++)
20     {
21         n3 += people[i];
22     }
23     for (i = 0; i < 10; i++)
24     {
25         if (n3 > n1 + n2)
26         {
27             n1 = n1 + n2;
28             n2 = people[i + 1];
29             n3 -= people[i + 1];
30         }
31         else
32         {
33             cout << "要停在";
34             cout << i + 1;
35             break;
36         }
37     }
38 
39 
40     return 0;
41 }

时间复杂度o(n)的算法优化了,却是我思维僵化了,本算法在老师的帮助下想出的。

转载于:https://www.cnblogs.com/mtant/p/4437178.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值