POJ - 1661 - Help Jimmy - 简单dp
http://poj.org/problem?id=1661
一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性。dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从平台左侧掉下或者从右侧掉下都只能有一次。
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long int N,X,Y,MAX; struct P{
int lx,rx,y;
int lt,rt;
int t;
bool operator<(P that){
return y>that.y;
}
}p[]; void update(int id){
int leftblock=;
int rightblock=;
for(int i=id+;i<N+;i++){
int dh=p[id].y-p[i].y;
if(dh>MAX)
return;
if(leftblock==&&p[i].lx<=p[id].lx&&p[i].rx>=p[id].lx){
p[i].lt=min(p[i].lt,p[id].lt+dh+abs(p[id].lx-p[i].lx));
p[i].rt=min(p[i].rt,p[id].lt+dh+abs(p[id].lx-p[i].rx));
p[i].t=min(p[i].t,p[id].lt+dh);
leftblock=;
} if(rightblock==&&p[i].lx<=p[id].rx&&p[i].rx>=p[id].rx){
p[i].lt=min(p[i].lt,p[id].rt+dh+abs(p[id].rx-p[i].lx));
p[i].rt=min(p[i].rt,p[id].rt+dh+abs(p[id].rx-p[i].rx));
p[i].t=min(p[i].t,p[id].rt+dh);
rightblock=;
}
//cout<<"i="<<i<<" "<<p[i].lt<<" "<<p[i].rt<<" "<<p[i].t<<endl; }
} int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d",&N,&X,&Y,&MAX);
p[].lx=p[].rx=X;
p[].y=Y;
p[].lt=p[].rt=p[].t=;
for(int i=;i<N+;i++){
scanf("%d%d%d",&p[i].lx,&p[i].rx,&p[i].y);
p[i].lt=p[i].rt=p[i].t=0x3f3f3f3f;
}
p[N+].lx=-;
p[N+].rx=;
p[N+].y=;
p[N+].lt=p[N+].rt=p[N+].t=0x3f3f3f3f;
sort(p,p+N+);
for(int i=;i<N+;i++){
update(i);
//cout<<p[i].lt<<" "<<p[i].rt<<" "<<p[i].t<<endl;
} printf("%d\n",p[N+].t);
}
}
2月24日就整理到这里了
POJ - 1661 - Help Jimmy - 简单dp的更多相关文章
- POJ 1661 Help Jimmy【DP】
基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...
- 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/最短路)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14980 Accepted: 4993 Descripti ...
- POJ 1661 Help Jimmy(C)动态规划
没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...
- POJ 1661 Help Jimmy(递推DP)
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
- poj 1157 LITTLE SHOP_简单dp
题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...
- POJ 1661 Help Jimmy(二维DP)
题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...
- POJ 1661 Help Jimmy(DP,注意边界)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9399 Accepted: 3025 Descri ...
- POJ 1661 Help Jimmy DP
思路:Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走.走到左端和走到右端所需的时间,容易算出. n如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左 ...
随机推荐
- 转:国内Top500Android应用分析报告
转自:https://mp.weixin.qq.com/s?__biz=MzA5OTMxMjQzMw==&mid=2648112527&idx=1&sn=b23c1b5f3e3 ...
- JBoss 6.1安装配置问题
一,配置环境变量 JBOSS_HOME:配置到解压文件的根文件夹下: classpath跟JAVA_HOME:配置的解压文件夹\bin文件夹以下: 二,訪问端口号 因为我之前安装过Tomcat,所以占 ...
- 仿MIUI音量变化环形进度条实现
Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...
- TCP socket心跳包示例程序
在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性. 在TCP socket心跳机制中,心跳包可以由服务器发送给客户端 ...
- SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY ...
- windows下安装elasticsearch6.2.4
window 下安装 elasticsearch 一.环境搭建需要的环境 1.jdk环境 2.Elasticsearch 3.git 环境 4.node 安装包 二.进行环境的搭建 1.解压Ela ...
- VLFeat中SIFT特征点检测
本代码使用VLFeat库中的函数对一幅图像进行了SIFT检测 需要事先配置好VLFeat和OpenCV,VLFeat的配置参考前一篇博文,OpenCV的配置网上一大堆,自己去百度 #include & ...
- 光纤与PON基础概念整理
近期有幸接触到通讯这一领域,此文专门用于整理记录. 首先是光纤与光缆 光纤(OpticalFiber,OF)是用来导光的透明介质纤维,一根有用化的光纤是由多层透明介质构成,一般能够分为三部分:折射率 ...
- 【python】How to change the Jupyter start-up folder
Copy the Jupyter Notebook launcher from the menu to the desktop. Right click on the new launcher and ...
- angularjs学习之八(angularjs中isolate scope的使用)
angular js中指令directive有个特别实用的东西,那就是 isolate scope (被隔离的scope) 关于详细他和全局的scope 有什么差别.能够參考以下这篇博文: Angul ...