传送门:http://poj.org/problem?id=1661

解题思路:其实吧,不难就是细节有点麻烦。

实现代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int MAXN=20005;
const int INF=1<<30;struct Node{int lx,rx,h;bool operator <(const Node &rhs) const{return h<rhs.h;}
}line[MAXN];int dp[MAXN][2];int main(){int T;scanf("%d",&T);while(T--){int N,X,Y,MAX;scanf("%d%d%d%d",&N,&X,&Y,&MAX);line[0].lx=X;line[0].rx=X;line[0].h=Y;for(int i=1;i<=N;i++)scanf("%d%d%d",&line[i].lx,&line[i].rx,&line[i].h);sort(line,line+N+1);dp[0][0]=line[0].h;dp[0][1]=line[0].h;for(int i=1;i<=N;i++){//计算第i个板子往左的时间int j=i-1;while(j>=0&&(line[i].lx>line[j].rx||line[i].lx<line[j].lx))j--;if(j==-1){if(line[i].h>MAX)dp[i][0]=INF;elsedp[i][0]=line[i].h;}else{if(line[i].h-line[j].h>MAX){dp[i][0]=INF;}else{int rt=INF,lt=INF;if(dp[j][0]!=INF&&line[i].h-line[j].h<=MAX)lt=dp[j][0]+line[i].lx-line[j].lx+line[i].h-line[j].h;if(dp[j][1]!=INF&&line[i].h-line[j].h<=MAX)rt=dp[j][1]+line[j].rx-line[i].lx+line[i].h-line[j].h;dp[i][0]=min(lt,rt);}}//计算往右走的时间j=i-1;while(j>=0&&(line[i].rx>line[j].rx||line[i].rx<line[j].lx))j--;if(j==-1){if(line[i].h>MAX)dp[i][1]=INF;elsedp[i][1]=line[i].h;}else{if(line[i].h-line[j].h>MAX)dp[i][1]=INF;else{int rt=INF,lt=INF;if(dp[j][0]!=INF&&line[i].h-line[j].h<=MAX)lt=dp[j][0]+line[i].rx-line[j].lx+line[i].h-line[j].h;if(dp[j][1]!=INF)rt=dp[j][1]+line[j].rx-line[i].rx+line[i].h-line[j].h;dp[i][1]=min(rt,lt);}}}printf("%d\n",min(dp[N][1],dp[N][0]));}
}

转载于:https://www.cnblogs.com/IKnowYou0/p/6628337.html

POJ 1661 Help Jimmy相关推荐

  1. POJ 1661 Help Jimmy(递推DP)

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

  2. POJ - 1661 Help Jimmy DP

    题目链接 题意:题意很明了,就是求从最高点最短多长时间到达地面,从板上的移动与空中下落的速度都是1: 做法:我们首先将所有的板子与起点按照,左.右端点,高度存起来,按照高度升序. 然后dp,设dp[i ...

  3. POJ 1661 Help Jimmy DP

    题目思路:状态转移方程很好推出,值得注意的是要分别判断是否能从一个平台的某侧移动到另一平台,也就是说要判断过一个平台的左端点或右端点做垂线,看这条垂线是否经过其他平台. #include<std ...

  4. Help Jimmy POJ - 1661

    Help Jimmy POJ - 1661 题意: 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终 ...

  5. 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]

    Help Jimmy POJ - 1661 题意:大致是一个人从某个点开始下落,下落的速度是1m/s,然后在平台上的时候可以左右移动,移动的速度也是1m/s,但是这里有一个限制,就是说每次下落的距离不 ...

  6. 【POJ - 1661】Help Jimmy(记忆化搜索,dp)

    题干: Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开 ...

  7. POJ 1661 DP

    Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11071   Accepted: 3607 Descr ...

  8. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  9. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

最新文章

  1. wrs-arcface虹软人脸识别
  2. shell用到的命令(2) —— break,continue,echo,eval,
  3. C++学习笔记30:模板与型式参数化
  4. UI素材|标签页 Tab实用案例,可临摹学习
  5. 力扣-1880(243 周赛) 检查某单词是否等于两单词之和
  6. 和利时dcs系统服务器设置,和利时DCS控制系统组态流程简介
  7. 烽火软件测试的笔试难不难,烽火科技笔试经验
  8. 人工智能第六章——约束满足问题(CSP)
  9. 第八周博客作业西北师范大学|李晓婷
  10. 京东安卓客户端values文件夹
  11. 计算机网络手写笔记图片,一键收藏!清华学子这样记笔记!
  12. python常见几种设计模式
  13. 微信小程序-灰度发布
  14. Google VP8 Code 首次深入技术分析 1
  15. 迷宫 做的第一个搜索题
  16. Redis介绍--列表(LISTS)数据类型(六)
  17. gbk, gb2312,big5,unicode,utf-8,utf-16的区别
  18. spark程序消费kafka数据报错:java.lang.NoSuchMethodError: net.jpountz.util.Utils.checkRange([BII)V
  19. 为论文添加目录的方法
  20. 安装ipython的命令是什么意思_ipython 命令

热门文章

  1. STM32HAL库---串口中断接收时间管理机制
  2. python编译安装pyaudio
  3. MATLAB线型和颜色对应说明
  4. ACE_Task介绍
  5. 【解决方案】QT读写文件
  6. Python读写json文件中文编码问题
  7. 3.2.1 造成误差的原因分析
  8. 大学计算机课程操作文档,计算机操作系统大学课程.pptx
  9. 第九讲 二阶齐次常系数线性ODE
  10. docker 推送镜像到私有地址