POJ 1744 Elevator Stopping Plan(贪心)

本文探讨了一个经典的电梯调度问题,通过二分查找算法优化电梯运行效率,确保乘客能以最短时间到达目标楼层。文章详细解释了算法思路,并提供了一段C语言实现的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:http://poj.org/problem?id=1744

题意:n个人从一栋楼的1层要向上达到自己要达到的某一层。电梯上一层需要4秒,人走一层需要20秒,电梯从停下到开启需要10秒。问最后一个到达自己目的地的人需要的时间最少是多少?

思路:二分答案,电梯每次尽可能地向上走。。

 

View Code
 1 #include <stdio.h>
 2 
 3 
 4 const int INF=1000000000;
 5 int a[30005],n;
 6 
 7 
 8 int OK(int t)
 9 {
10     int curpos=0,prepos=1,cost=0,flag=0,i;
11     for(i=0;i<n;i++) if((a[i]-prepos)*20+cost>t)
12     {
13         if(flag) cost+=10;
14         else flag=1;
15         if((a[i]-prepos)*4+cost>t) return 0;
16         curpos=a[i];
17         while((curpos-prepos)*4+(curpos-a[i])*20+cost<=t)
18             curpos++;
19         curpos--;
20         cost+=(curpos-prepos)*4;
21         prepos=curpos;
22     }
23     return 1;
24 }
25 
26 int main()
27 {
28     while(scanf("%d",&n),n)
29     {
30         int i,low=0,high=INF,mid;
31         for(i=0;i<n;i++) scanf("%d",&a[i]);
32         while(low<=high)
33         {
34             mid=(low+high)>>1;
35             if(OK(mid)) high=mid-1;
36             else low=mid+1;
37         }
38         if(OK(high)) printf("%d\n",high);
39         else printf("%d\n",low);
40     }
41     return 0;
42 }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值