Help Jimmy DP
场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。
设计一个程序,计算Jimmy到底地面时可能的最早时间。
Input
Jimmy的大小和平台的厚度均忽略不计。如果Jimmy恰好落在某个平台的边缘,被视为落在平台上。所有的平台均不重叠或相连。测试数据保证问题一定有解。
Output
Sample Input
1
3 8 17 20
0 10 8
0 10 13
4 14 3
Sample Output
23
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
/*
dp[i][2] 考虑到当前第i个木板 高度为j 从左边/右边下落到地面的最短时间
dp[i][0] = min(dp[k][0] + d1,dp[k][1] + d2)
*/
#define INF 0x3f3f3f3f
#define MAXN 1009
struct node
{
int l,r,h;
bool operator<(const node& rhs)const
{
return h < rhs.h;
}
}a[MAXN];
int N,X,Y,MAX;
int dp[MAXN][];
int main()
{
int T;
ios::sync_with_stdio();
cin>>T;
while(T--)
{
memset(dp,INF,sizeof(dp));
cin>>N>>X>>Y>>MAX;
for(int i = ;i<N;i++)
{
cin>>a[i].l>>a[i].r>>a[i].h;
}
sort(a,a+N);
for(int i= ;i<N;i++)
{
bool left= false, right = false;
for(int j = ;j<i;j++)
{
if(a[i].h - a[j].h <= MAX && a[j].l<=a[i].l&&a[i].l<=a[j].r)
{
left = true;
dp[i][] = min(dp[j][] + a[i].l - a[j].l,dp[j][] + a[j].r - a[i].l);
}
if(a[i].h - a[j].h <= MAX &&a[j].l<=a[i].r&&a[i].r<=a[j].r)
{
right = true;
dp[i][] = min(dp[j][] + a[i].r - a[j].l, dp[j][] + a[j].r - a[i].r);
}
}
if(a[i].h<=MAX)
{
if(!left) dp[i][] = ;
if(!right) dp[i][] = ;
}
}
int k = -;
for(int j = N-;j>=;j--)
{
if(Y>a[j].h && Y - a[j].h <=MAX && X >= a[j].l && X <= a[j].r)
{
k = j;
break;
}
}
if(k==-)
cout<<Y<<endl;
else
cout<<Y + min(dp[k][] + X-a[k].l,dp[k][] + a[k].r - X)<<endl;
}
}
Help Jimmy DP的更多相关文章
- POJ 1661 Help Jimmy DP
思路:Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走.走到左端和走到右端所需的时间,容易算出. n如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左 ...
- POJ 1661 Help Jimmy(DP,注意边界)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9399 Accepted: 3025 Descri ...
- POJ1661 Help Jimmy —— DP
题目链接:http://poj.org/problem?id=1661 Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- M - Help Jimmy DP
"Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某 ...
- POJ-1661-Help Jimmy(DP, 递推)
链接: https://vjudge.net/problem/POJ-1661 题意: "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同 ...
- Help Jimmy ~poj-1661 基础DP
Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开始下落, ...
- POJ 1661 Help Jimmy(二维DP)
题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...
- kuangbin专题十二 POJ1661 Help Jimmy (dp)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14214 Accepted: 4729 Descr ...
- POJ - 1661 - Help Jimmy - 简单dp
http://poj.org/problem?id=1661 一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性.dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从 ...
随机推荐
- OAuth2.0认证流程是如何实现的?
导读 大家也许都有过这样的体验,我们登录一些不是特别常用的软件或网站的时候可以使用QQ.微信或者微博等账号进行授权登陆.例如我们登陆豆瓣网的时候,如果不想单独注册豆瓣网账号的话,就可以选择用微博或者微 ...
- nginx for windows 安装
一.nginx for windows 的安装地址: http://nginx.org/en/download.html 二.nginx 安装地址: http://nginx.org/en/docs/ ...
- apache设置无缓存
打开httpd.conf 开启扩展 确保开启 LoadModule headers_module modules/mod_headers.so 添加配置项 并添加以下配置,跟据文件类型来让浏览器每次都 ...
- iOS-UI控件之UIButton
---恢复内容开始--- UIButton 既可以显示图片,又可以显示文字,还能随时调整内部位置 系统自带尺寸 storyboard内部调整UIButton属性 状态 监听按钮点击事件 凡是继承自UI ...
- linux 安装 mongo 3.4
要求:linux 安装 mongo 3.4 大体上,按照官网提供的方法来做. 系统是ubuntu 16.04 安装的是mongo3.4.8 社区版 1. 导入导入包管理系统使用的公钥 ...
- webpack2版本四个核心概念
webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler) 四个核心概念: --------------------------------------- ...
- pymouse pykeyboard
import time from pymouse import PyMouse from pykeyboard import PyKeyboard import re import win32clip ...
- CentOS7-Git安装以及使用
2018-09-14 Git安装 在bash终端中输入命令sudo yum install git回车. (出乎意料的顺利) 在随后出现的交互式对话中输入y即可. 随后,当任务执行完后,在bash中键 ...
- CSU1007: 矩形着色
Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...
- vijos1382寻找主人
题目大意: 给出两个串(长度<=1e6),问是否同构,如果同构输出最小表示. 题解: 这是最小表示法模板题.在这里好好讲一下最小表示法. 首先有一个最暴力的方法:把所有表示搞出来排序. 时间复杂 ...