poj-1661-Help Jimmy
来源:互联网 发布:计算机组成原理 知乎 编辑:程序博客网 时间:2024/06/16 13:09
题目地址
http://poj.org/problem?id=1661
题目大意
- 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
- Jimmy老鼠在时刻0从高于所有平台的某处开始下落,
它的下落速度始终为1米/秒。当Jimmy落到某个平台上
时,游戏者选择让它向左还是向右跑,它跑动的速度
也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下
落。 - Jimmy每次下落的高度不能超过MAX米,不然就
会摔死,游戏也会结束。 - 设计一个程序,计算Jimmy到地面时可能的最早时间。
解题思路
- Jimmy每到一个平台,都有二种选择,左和右
- 不断的递归,直到地面
Code
#include <stdio.h>#include <iostream>#include <stdlib.h>#include <string.h>#include <queue>#include <map>#include <vector>#include <math.h>#include <algorithm>#define INF 0x3fffffff#define N 1100using namespace std;typedef long long LL;int n, x, y, MAX;struct Node { int l, r, h; bool operator < (const Node b) const { return h > b.h; }};Node node[N];int left_time[N];int right_time[N];int min_time(int cur, int is_left) { int high = node[cur].h; int target; if (is_left) { target = node[cur].l; } else { target = node[cur].r; } int next; for (next = cur+1; next <= n; next++) { if (node[next].l <= target && target <= node[next].r) { break; } } if (next <= n) { if (high - node[next].h > MAX) { return INF; } } else { if (high > MAX) { return INF; } else { return high; } } int l_time = high - node[next].h + target - node[next].l; int r_time = high - node[next].h + node[next].r - target; if (left_time[next] == -1) { left_time[next] = min_time(next, true); } if (right_time[next] == -1) { right_time[next] = min_time(next, false); } l_time += left_time[next]; r_time += right_time[next]; return min(l_time, r_time);}int main() {#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin);#else //#endif int t; cin >> t; while (t--) { memset(left_time, -1, sizeof(left_time)); memset(right_time, -1, sizeof(right_time)); cin >> n >> x >> y >> MAX; node[0].l = x; node[0].r = x; node[0].h = y; for (int i = 1; i <= n; i++) { cin >> node[i].l >> node[i].r >> node[i].h; } sort(node, node+n+1); printf("%d\n", min_time(0, true)); } return 0;}
参考
https://d396qusza40orc.cloudfront.net/pkupop/lectures/Week13/W13-04_%E5%8A%A8%E5%BD%92%E4%B9%8B%E5%87%A0%E4%B8%AA%E4%BE%8B%E9%A2%98.pdf
阅读全文
0 0
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- Poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- java 动态规划策略原理及例题
- Jedis使用
- HDU
- 拓展KMP详解+(笔记)
- HDU 6162 Ch’s gift
- poj-1661-Help Jimmy
- 常用标签
- 刷题——hdu 6168 Numbers
- SpringMVC+Mybatis+POI 导出Excel
- Java MyBatis 插入数据库返回主键 总返回行数
- shell
- 我们到底该不该使用 force index()索引?
- lightoj1042
- 第七章 Customizing Concurrency Classes(自定义并发类)【下】