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的更多相关文章

  1. POJ 1661 Help Jimmy【DP】

    基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...

  2. POJ 1661 Help Jimmy LIS DP

    http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...

  3. POJ 1661 Help Jimmy(DP/最短路)

    Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14980 Accepted: 4993 Descripti ...

  4. POJ 1661 Help Jimmy(C)动态规划

    没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...

  5. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  6. poj 1157 LITTLE SHOP_简单dp

    题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...

  7. POJ 1661 Help Jimmy(二维DP)

    题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...

  8. POJ 1661 Help Jimmy(DP,注意边界)

    Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9399   Accepted: 3025 Descri ...

  9. POJ 1661 Help Jimmy DP

    思路:Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走.走到左端和走到右端所需的时间,容易算出. n如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左 ...

随机推荐

  1. python发声

    python发声 学习了:http://www.jb51.net/article/62644.htm import winsound winsound.Beep(600,1000) #其中600表示声 ...

  2. 计算机网络系列:2M的宽带指的是下载速度么?

    本篇文章对于不懂网络的小白有点用处.避免以后闹笑话.当然.对大神来说.这都是常识了. 我相信非常多人都有过这个问题:我4M的宽带怎么下载速度才300kb/s啊啊啊.这坑爹的宽带. 我没学的时候我也会这 ...

  3. Python爬取韩寒所有新浪博客

    接上一篇,我们依据第一页的链接爬取了第一页的博客,我们不难发现,每一页的链接就仅仅有一处不同(页码序号),我们仅仅要在上一篇的代码外面加一个循环,这样就能够爬取全部博客分页的博文.也就是全部博文了. ...

  4. iGrimaceVX3.0和1.44在线源手机直接安装教程

    [第一步] 先安装好三个组件设备必须是苹果越狱好后 确定6点几跟7点几的版本号才干够 首先打开cydia 选开发人员 以下 点软件源 点右上角编辑  1加入源 apt.25pp.com和IG包下载源a ...

  5. UVA - 12338 Anti-Rhyme Pairs 二分+hash

    题目链接:传送门 题意: 给你n个串 问你任意两个串的最大公共前缀长度是多少 题解: 二分+hash 思路很明显,我最近用来写hash 很鸡肋 #include<bits/stdc++.h> ...

  6. set -- $variable

    1 set --的用途 给位置参数赋值. 2 $variable是如何赋值给位置参数的 假如variable=a b c?或者variable=a;b;c? 这里果然和IFS有关,默认情况下,vari ...

  7. SEO搜索引擎基础原理

  8. SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )

    亲和数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...

  9. POJ1094 Sorting It All Out —— 拓扑排序

    题目链接:http://poj.org/problem?id=1094 Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Tot ...

  10. js实现域名判断后跳转到指定网址

    js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script>       try           {               if(self.locatio ...