uvalive 2949 - Elevator Stopping Plan(贪心+二分)
来源:互联网 发布:js input text 选中 编辑:程序博客网 时间:2024/05/16 10:12
题目连接:2949 - Elevator Stopping Plan
题目大意:某个抠门的公司只有一个电梯, 现在有n 个人从1楼, 他们有各自想要到达的楼层, 然后电梯每上一楼需要4 秒, 每在一个楼层开门需要10 秒, 然后然爬楼梯的话需要20一楼。问, 如何用最短的时间让所有人都到达各自想要到的楼层。
解题思路:因为人可以爬楼梯, 所以可以在某个楼层下楼之后走楼梯到达想要到的楼层, 只要在最后一个人到达之前就可以。 对于时间可以采取二分的方式搜索, 所以只要判断某个时间能否将所有人送到指定楼层就可以了。 对于判断我们可以用贪心去做, 尽量让电梯停在较高的楼层,只要剩余的时间够使得人走到自己的楼层就可以了。
#include <stdio.h>#include <string.h>const int N = 32;int n, mid, top, cnt, vis[N], stop[N];void read() { int t; top = 0; memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) {scanf("%d", &t);vis[t] = 1;if (t > top)top = t; }}bool judge(int tmp) { cnt = 0; memset(stop, 0, sizeof(stop)); for (int i = tmp / 20 + 2; i <= top; i++) {while (!vis[i] && i < top) i++;int t = (i - 1) * 4 + cnt * 10;if (tmp < t)return false;t = (tmp - 10 * cnt + 20 * i + 4) / 24;i = (tmp - 10 * cnt + 16 * t + 4) / 20;stop[cnt++] = t; } return true;}int solve() { int L = 0, R = 14 * (top - 1); while (L < R) {mid = (L + R + 1) / 2;if (mid == R)break;if (judge(mid)) R = mid;else L = mid; } return mid;}int main() { while (scanf("%d", &n) == 1 && n) {read();judge(solve());printf("%d\n%d", mid, cnt);for (int i = 0; i < cnt; i++) printf(" %d", stop[i]);printf("\n"); } return 0;}
- UVALive 2949 Elevator Stopping Plan(二分 + 贪心)
- UVALIVE 2949 Elevator Stopping Plan(二分 + 贪心)
- uvalive 2949 - Elevator Stopping Plan(贪心+二分)
- UVALive - 2949 Elevator Stopping Plan
- UVALive - 2949 Elevator Stopping Plan
- 贪心+二分 openjudge746 Elevator Stopping Plan
- 贪心算法之Elevator Stopping Plan
- pku1744 Elevator Stopping Plan
- [openjudge] Elevator Stopping Plan
- pku 1771Elevator Stopping Plan
- poj 1744 Elevator Stopping Plan
- POJ 1744 Elevator Stopping Plan
- [openjudge] 746:Elevator Stopping Plan
- POJ 1744 Elevator Stopping Plan 以及对二分搜索的思考
- uvalive 2949(二分+贪心)
- uvalive 3971 - Assemble(二分搜索 + 贪心)
- uvalive 3971 - Assemble(二分搜索 + 贪心)
- UVALIVE 5000 Underwater Snipers(二分+贪心)
- MediaRecorder类介绍
- 在任何时候我们都认为是美丽的10种颜色
- LayerDrawable层叠样式layer-list
- 双链表的建立、查找、删除、插入
- android动态添加图层
- uvalive 2949 - Elevator Stopping Plan(贪心+二分)
- Java二维数组的声明和初始化
- PHP结尾不使用闭合标记“?>”的好处
- Android实现Filterable通过输入文本框实现联系人自动筛选
- 10,少年白_接触计算机的这几年
- ReportViewer报表模版中显示图片
- poj 2528 Mayor's posters 线段树+离散化
- HandlerThread
- 参加2013克莱斯勒杯黑马大赛成都分赛有感