POJ - 1661:Help Jimmy

POJ 1661 Help Jimmy -- 动态规划 题目地址:http://poj.org/problem?id=1661 Description "Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右 阅读详情

"Help Jimmy" 是在下图所示的场景上完成的游戏。 

场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 

Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。 

设计一个程序,计算Jimmy到底地面时可能的最早时间。 

Input

第一行是测试数据的组数t(0 <= t <= 20)。每组测试数据的第一行是四个整数N,X,Y,MAX,用空格分隔。N是平台的数目(不包括地面),X和Y是Jimmy开始下落的位置的横竖坐标,MAX是一次下落的最大高度。接下来的N行每行描述一个平台,包括三个整数,X1[i],X2[i]和H[i]。H[i]表示平台的高度,X1[i]和X2[i]表示平台左右端点的横坐标。1 <= N <= 1000,-20000 <= X, X1[i], X2[i] <= 20000,0 < H[i] < Y <= 20000(i = 1..N)。所有坐标的单位都是米。 

Jimmy的大小和平台的厚度均忽略不计。如果Jimmy恰好落在某个平台的边缘,被视为落在平台上。所有的平台均不重叠或相连。测试数据保证问题一定有解。 

Output

对输入的每组测试数据,输出一个整数,Jimmy到底地面时可能的最早时间。

Sample Input

1
3 8 17 20
0 10 8
0 10 13
4 14 3

Sample Output

23


解题思路:

Jimmy跳到一块板上后,可以有两种选择,向左走,或向右走。 走到左端和走到右端所需的时间,是很容易算的。 如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达 地面的最短时间,那么向左走还是向右走,就很容选择了。 因此,整个问题就被分解成两个子问题,即Jimmy所在位置下方第一块板左 端为起点到地面的最短时间,和右端为起点到地面的最短时间。 这两个子问题在形式上和原问题是完全一致的。将板子从上到下从1开始进 行无重复的编号(越高的板子编号越小,高度相同的几块板子,哪块编号在前 无所谓),那么,和上面两个子问题相关的变量就只有板子的编号。
不妨认为Jimmy开始的位置是一个编号为0,长度为0的板子, 假设LeftMinTime(k)表示从k号板子左端到地面的最短时间, RightMinTime(k)表示从k号板子右端到地面的最短时间,那么, 求板子k左端点到地面的最短时间的方法如下:

    

   上面,h(i)就代表i号板子的高度,Lx(i)就代表i 号板子左端点的横坐标,Rx(i)就代表i号板子右端 点的横坐标。那么 h(k)-h(m) 当然就是从k号板 子跳到m号板子所需要的时间,Lx(k)-Lx(m) 就 是从m号板子的落脚点走到m号板子左端点的时 间,Rx(m)-Lx(k)就是从m号板子的落脚点走到右 端点所需的时间。 求RightMinTime(k)的过程类似。 不妨认为Jimmy开始的位置是一个编号为0, 长度为0的板子,那么整个问题就是要求 LeftMinTime(0)。 输入数据中,板子并没有按高度排序,所以程 序中一定要首先将板子排序。
时间复杂度: 一共 n个板子,每个左右两端的最小时间各算 一次 O(n) 找出板子一段到地面之间有那块板子,需要遍历板子 O(n)
总的时间复杂度O(n2)

 

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <string.h>

using namespace std;

const int N=1010;
const int M=20010;
const int INF=0x3f3f3f; //非常棒的选择

struct Time  //定义结构体
{
    int x1,x2,h;
}a[N];

int dp[N+2][2]; // 0:表示第i的木板左边到底部的最短时间
              // 1: 表示第i的木板右边到底部的最短时间

int n,x,y,max_h;

int cmp(Time c,Time b) //排序函数
{
    return c.h > b.h; //从大到小排列
}

void left(int i) //左
{
    //如果平台i下面有平台,且两者相距不超过MAX
    int k = i+1;
    while( k<n+1 && a[i].h-a[k].h<=max_h ) //n+1处是地面
    {
        //确保平台k在平台i的左下方,且小鼠可以跳到上面
        if(a[i].x1 >= a[k].x1 && a[i].x1 <= a[k].x2)
        {
            //核心
            dp[i][0] = a[i].h-a[k].h + min(dp[k][0] + a[i].x1-a[k].x1 , dp[k][1]+a[k].x2-a[i].x1);
            return; //千万不要忘记:易错点+难点
        }
        k++;
    }

    if(a[i].h-a[k].h>max_h) //因为第二个条件出的循环即:不能到达下一平台
        dp[i][0]=INF;
    else  //这里的else是最有灵魂的地方:成败都在这
        dp[i][0]=a[i].h; //因为它下面没木板,直接落地
}

void right(int i)//右
{
    //如果平台i下面有平台,且两者相距不超过MAX
    int k=i+1;
    while(k<n+1 && a[i].h-a[k].h<=max_h)
    {
        //确保平台k在平台i的右下方,且小鼠可以跳到上面
        if(a[i].x2<=a[k].x2 && a[i].x2 >= a[k].x1)
        {
            dp[i][1]=a[i].h-a[k].h+min(dp[k][0] + a[i].x2-a[k].x1  ,  dp[k][1] + a[k].x2-a[i].x2);
            return;
        }
        k++;
    }
    if(a[i].h-a[k].h > max_h)//不能到达下一平台
        dp[i][1]=INF;
    else
        dp[i][1]=a[i].h; //因为它下面没木板,直接落地
}

int main()
{
    int t,i;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&n,&x,&y,&max_h);//木板个数、老鼠的初始坐标、最大跳跃高度

        //地面也当做一块木板
        a[0].x1=-20000;
        a[0].x2=20000;
        a[0].h=0;
        //老鼠初始位置也当做一块木板
        a[1].x1=x;
        a[1].x2=x;
        a[1].h=y;

        for(i=2;i<=n+1;i++) //输入数据
            scanf("%d%d%d",&a[i].x1,&a[i].x2,&a[i].h);

        sort(a,a+n+2,cmp);  // 排序:一定要把sort用好
        memset(dp,0,sizeof(dp)); //初始化

        //为什么i是从n开始的呢?毋庸置疑n+1处是小鼠最初的位置往左往右都是0
        for(i=n; i>=0 ;i--)
        {
            left(i);//进行左:去bfs
            right(i);//进行右:去bfs
        }
        int time=min(dp[0][0],dp[0][1]); //取最小值
        printf("%d\n",time); //输出结果
    }
    return 0;
}

 

69页完整版智慧港口综合解决方案 智慧港口需求4港机远程操控等自动化改造需求自动化码头AGV无线通信及专用视频系统需求安全生产视频监控类需求港机RCMS及设备管理需求岸边智能理货码头三维全景应用智慧港口解决方案5自动化码头AGV/跨运车/无人集卡无线接入港机远控视觉及冗余无线通信视觉集卡防吊起系统集装箱码头岸边智能理货港机RCMS系统无线接入港机智能化管理(无线高清视频监控、一键报警、远程抄表系统)港口拖轮无线接入岸边溢油监测系统TD-LTE覆盖及业务终端接入港口生产管理系统港口可视化集群调度港口GiNMS综合网络设备智能管理全球作业效率最 阅读详情

相关推荐

黑苹果从入门到精通:最详细的VMware安装macOS教程

前言 不知为何,以前我发的两篇关于黑苹果的文章或没过审或被删除,最近SMZDM上有不少优质的黑苹果文章发出来,貌似禁令已开,前段时间在一篇写的很不错的黑果文章下吹牛说今年要写一个系列,故有了这篇文章作为系列的开头。 系列的名字起的有点俗,叫做xxx从入门到精通,但是我很喜欢,相信过半的黑果群众都是程序员,作为教程来说这个名字俗但是好用,我也希望这个系列能像其它入门到精通系列一样,让大家学到东西...

La victoria的博客 14万+

POJ 1661(中等 dp,跳板游戏)

http://poj.org/problem?id=1661 题意:不多讲,求从出发点到底的最短时间。 思路:把从一个点到下一个板的问题看成两个雷同的问题,一切尽在代码解释中。 #include #include #include #include #define M 1000 #define inf 0x3f3f3f3f using namespace std; int

Since_natural_ran 389

eQTL:连接突变与基因表达的桥梁

欢迎关注”生信修炼手册”!在高等生物中,很多的重要性状都为数量形状,比如农作物的产量,人类复杂疾病(高血液,糖尿病)等等。对于这些数量性状而言,往往受到多个基因的调控作用。为了更好的开展...

庐州月光的博客 7067

poj1661-help Jimmy(动态规划递归求解)

利用动态规划,递归,模拟,解决poj1661

m0_73494050的博客 129

从零到一:手把手教你用Python搭建医学影像识别CNN模型(附完整代码)

本文详细介绍了如何使用Python和TensorFlow/Keras从零开始构建一个医学影像识别的CNN模型,涵盖数据预处理、模型架构设计、训练调优及部署全流程。通过实战案例和完整代码,帮助开发者快速掌握深度学习在医学影像识别中的应用,特别适合医疗AI领域的初学者和研究者。

spark7igniter的博客 200

BLDC六步换相驱动实战:从霍尔真值表到PWM调速的代码实现

本文详细解析了BLDC六步换相驱动原理,从霍尔真值表解读到PWM调速的代码实现,提供了基于STM32的实战方案。重点介绍了霍尔信号解码、换相状态机设计以及PWM动态调速策略,帮助开发者快速掌握无刷电机驱动技术。

weixin_28273593的博客 210

POJ 1661 SPFA过的。。。感谢各种牛贴出来的数据。。。

Help JimmyTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 6228 Accepted: 1939<br />Description"Help Jimmy" 是在下图所示的场景上完成的游戏。 <br /><br />场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 <br /><br />Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者

bingshen的专栏 1794

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

POJ--1661(DP)

jimmy的一个游戏,可以从左右端点往下跳,每秒走一米或落一米,落的超过_max会摔死,问到达地面的最短时间,测试用例保证一定有解。 一道基础的DP,太tm考验我了,有些细节容易处理不好,中间卡了下,写错好几个地方,不过我居然一遍过了也真是水…… 用了二维的状态,dp[k][0],dp[k][1]分别表示从上一个端点落下来并移动到本k层的左、右端点需要的时间,如果到不了直接在上一个状态恢复到I

whoISVip 927

CODESYS Softmotion(一)功能介绍

一、CODESYS SoftMotion RTE SL产品 1.1 CODESYS Runtime SL 产品家族介绍 目前支持的主流厂商的硬件产品,让部署在上面的成为实时设备。 对于Windows系统,根据需求选择对应的Runtime: RTE极大的提高了实时性,适合进行运动控制,同时RTE还支持了多个主从站协议: 还可以选择可选的功能(Single License): RTE对硬件和系统有要求,如果你需要硬件功能,那么网卡会有最低要求。 1.2 RTE的下载和安装 在官网http://codes

Fishfishfishfishcat 2万+

JavaSpringBoot + VUE 相关开发环境配置合集

1.Java环境-JDK安装 参照:Java基础1-环境篇:JDK安装与环境变量配置 Java基础1-环境篇:JDK安装与环境变量配置_第一段代码的博客-优快云博客_jdk 2.Web服务器-Tomcat安装 原创Java服务器Tomcat安装和配置 3.Maven(后面为了项目兼容性,使用了3.0.5版本) 原创Maven安装和配置(Maven3.0.5) 4.nginx 原创nginx轻量级Web服务器安装和配置 5 数据库mysql 原创数据库Mysql安装和配置 ...

第一段代码的博客 3163

《poj 1661》详解(动态规划)

一开始拿到题的时候想从高处往下dp,但是发现不行,于是看了很多网上的题解。 讲的思路都蛮好,但是有些地方没有说清楚.于是想来记录一下. 首先,这题显然是一个dp的解法. 那么我们设置状态: dp[i][0]表示从i平台的左边走到地面所需的最小时间 dp[i][1]表示从i平台的右边走到地面所需的最小时间 将左右走分开找. 由这样的设置状态我们可以明白:我们采取应该从底向上的递推顺序. 然后就可以去...

weixin_45671214的博客 412

基于深度学习YOLOv10的人脸表情识别系统(附完整资源+PySide6界面+训练代码)

本文介绍了如何基于YOLOv10实现一个人脸表情识别系统。我们从数据集准备、模型训练到PySide6界面实现进行了详细的讲解。通过该系统,用户可以实时检测和分类人脸表情,为情感分析、智能交互等应用场景提供支持。

YOLO 1053

DP:poj1661 Help Jimmy

[转]http://blog.youkuaiyun.com/zxy_snow/article/details/5771229   此题目的“子问题”是什么呢? n Jimmy 跳到一块板上后,可以有两种选择,向左走或向右走。走到左端和走到右端所需的时间,容易算出。 n 如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左走还是向右走,就很容选择了。 ...

caoruntaogmail的博客 134

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

poj 1661 Help Jimmy(DP:记忆化搜索)

遇到这一类

小华在努力~ 504

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

动态规划:POJ(1661)Help Jimmy 动态规划

1 题目地址:猛戳我         2. Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8223   Accepted: 2629 Description "Help Jimmy" 是在下图所示的场景

831

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【POJ - 1661】Help Jimmy (动态规划)

【POJ - 1661】Help Jimmy (动态规划) Help Jimmy Descriptions: "Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平...

Sky丨Star的博客 489

【DP|暴力】POJ-1661 Help Jimmy

Help Jimmy Time Limit: 1000MS Memory Limit: 10000KDescription “Help Jimmy” 是在下图所示的场景上完成的游戏。场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左

JSure的代码库 1470

POJ 1661 Help Jimmy (只能根据上面的坐标往下DP)

Description "Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Ji

Do not mess it up 505

poj 1661 help Jimmy(dp)

poj 1661 help Jimmy(dp) 程序设计实习动态规划练习

PKU_ZZY的博客 1043

经典递归问题--帮助Jimmy POJ--1661

经典递归问题--帮助Jimmy--POJ 1661

知识源于积累 1535

poj 1661 Help Jimmy

题目链接:http://poj.org/problem?id=1661      标准的DP,首先将输入数据按高度进行排序,将开始下落的位置初始化为左右坐标均为x,高度为y的平台(方便统一处理),然后从上至下搜寻最短路径。。     DP的思想已经掌握了,但是各种细节的处理还是远远达不到,这里贴出大神的代码,以示参考   #include #include #include #inc

WeberXie 1059

POJ-1661 Help Jimmy

“Help Jimmy” 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就...

slass-mot-odet 346

POJ 1661 Help Jimmy(C)动态规划

POJ,1661,Help Jimmy,动态规划,C,解题思路,截图,二维数组,结构体数组。时间复杂度,空间复杂度,升序排序,自定义比较函数,qsort,compare,limit.h,INT_MAX,提交结果。

wowpH 273

poj1661 Help Jimmy(DP)

题目链接: http://poj.org/problem?id=1661 题目大意:中文题。 思路:这个题目可以用DP。 对于这个问题,要求总的时间最短。如果在某一块板上,可以选择往左或者往右走。如果此刻我们知道了往左走和往右走到达地面所用的最短时间,那么我们就可以判断出往哪个方向走是最优的。如果我们设置dp[i][j],dp[0][i]表示在第i块板上往左走的最短时间,dp[1][i

hahahaha 661
上一篇: 急事缓做
下一篇: OpenJ_Bailian - 2755:神奇的口袋
朱事顺利、
博客等级 码龄9年 25粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱事顺利、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值