POJ 1661 DP
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 11071 | Accepted: 3607 |
Description

场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
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
Source
//它可以在一个板的右边向下跳或左边向下跳,用0,1分别表示从左跳从右跳
//dp[i][0]=min(dp[i-1][0]+d1,dp[i-1][1]+d2)+h;
//从i板左边跳的值是i板能跳到的下一个板的左右端值分别加上在板上的移动距离再加上高度差中小的那个。
//右边同样。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[][];
struct Loc
{
int l,r,h;
}Locs[];
bool cmp(Loc a,Loc b) {return a.h<b.h;}
int main()
{
int t,n,x,y,maxh;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&n,&x,&y,&maxh);
for(int i=;i<n;i++)
scanf("%d%d%d",&Locs[i].l,&Locs[i].r,&Locs[i].h);
sort(Locs,Locs+n,cmp);
Locs[n].l=Locs[n].r=x;Locs[n].h=y;
for(int i=;i<=n;i++){
f[i][]=f[i][]=(Locs[i].h>maxh?:Locs[i].h);
for(int j=i-;j>=;j--){
if(Locs[i].l>=Locs[j].l&&Locs[i].l<=Locs[j].r&&Locs[i].h-Locs[j].h<=maxh){
f[i][]=min(f[j][]+Locs[i].l-Locs[j].l,f[j][]+Locs[j].r-Locs[i].l)
+Locs[i].h-Locs[j].h;
break;
}
}
for(int j=i-;j>=;j--){
if(Locs[i].r<=Locs[j].r&&Locs[i].r>=Locs[j].l&&Locs[i].h-Locs[j].h<=maxh){
f[i][]=min(f[j][]+Locs[i].r-Locs[j].l,f[j][]+Locs[j].r-Locs[i].r)
+Locs[i].h-Locs[j].h;
break;
}
}
}
printf("%d\n",f[n][]);
}
return ;
}
POJ 1661 DP的更多相关文章
- E - Help Jimmy POJ - 1661 dp
E - Help Jimmy POJ - 1661 这个题目本身不是很难,但是可以更加优化这个写法. 开始是n*n #include <cstdio> #include <cstri ...
- Help Jimmy POJ - 1661 dp
#include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> u ...
- POJ 1661 Help Jimmy(递推DP)
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
- POJ 1661 Help Jimmy(C)动态规划
没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...
- POJ 1661 Help Jimmy LIS DP
http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...
- POJ 1661 Help Jimmy(二维DP)
题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...
- POJ - 1661 - Help Jimmy - 简单dp
http://poj.org/problem?id=1661 一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性.dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从 ...
- POJ 1661 Help Jimmy【DP】
基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...
- POJ 1661 Help Jimmy(DP,注意边界)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9399 Accepted: 3025 Descri ...
随机推荐
- 【转载】完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...
- 棋盘问题:dfs
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- Solidity中的基本类型转换
Solidity中的基本类型转换(十四)|入门系列 2017/4/29 posted in Solidity入门系列 点击查看原文,获得优化的排版. 隐式转换 如果一个运算符能支持不同类型.编译器会隐 ...
- lvs+keepalived详解
常用软件安装及使用目录 资源链接:https://pan.baidu.com/s/15rFjO-EnTOyiTM7YRkbxuA 网盘分享的文件在此 官网:http://www.linuxvir ...
- POJ 2986 A Triangle and a Circle(三角形和圆形求交)
Description Given one triangle and one circle in the plane. Your task is to calculate the common are ...
- 使用 letter-space 后文字不能居中解决
letter-space:2em; text-align: center; 使用letter-space后和上面的字体对比明显没有居中: 选定元素后发现,每个字后面都被加了2em,不是不能居中而是因为 ...
- protected、public、private
一.protected成员 1. 受保护的成员的可访问性 对于一个类的protected成员,①该类的用户(如类对象)不能访问它,②该类的派生类的成员(及其友元)可以访问它. 派生类的成员及其友元不能 ...
- UML设计(团队作业)
UML设计 一.团队信息 1.队名 读完文章再睡觉 2.团队成员的学号与姓名 学号 姓名 211606381 吴伟华(队长) 211606369 蔺皓雯 211606340 杨池宇 211606372 ...
- Ubuntu16.04修改IP
首先用root用户登陆,然后输入你root的密码.如下图: 然后编辑interfaces文件,该文件位于/etc/network/下,执行如下命令: vim /etc/network/interf ...
- JS中的数组转变成JSON格式字符串的方法
有一个JS数组,如: var arr = [["projectname1","projectnumber1"],["projectname2" ...