POJ1661 help Jimmy(动态规划)

第九届蓝桥杯省赛C++B组 测试次数 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。 各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。 x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。 如果手机从第7层扔下去没摔坏,但... 阅读详情

题目链接:http://poj.org/problem?id=1661

测试数据:

 

3

 

3 8 7 2

6 14 6

4 10 4

5 14 2

 

1 6 10 20

2 3 5

 

 

2 8 15 20

7 9 13 

5 10 2

 

answer:

17

10

17

 

题目要求我们求出Jimmy到地面的最短时间,相信大家都能看得懂题目的意思,这里就直接分析题目。

 

 

题目分析:①Jimmy到一个木板上时可以往左也可以往右,而到达下一个木板时也是往右或者往左,下下个也是。说明每一步都和前一步相同。

②到达木板左右两端所需的时间是很好算的。

③则此问题可以被分解为一个个子问题,Jimmy当前位置的下一个块木板左端到地面的最短的距离和右端点到底端的最短距离,而此块木板左端到地面的最短距离又是当前位置的下一块木板左端(右端)到地面的最短距离…………

记得把木板按照高端从大到小排序,初始位置可以看成像一个点的木板,比如:x1=8 x2=8 h=17

求左端最短时间的伪代码:

//vis[][]代表当前木板左右端点,0代表左

//RightMinTime和LeftMinTime类似

int LeftMinTime(int now_wood){

int next_wood=search(找出下一个能到达木板)

if(如果找不到木板)

{

if(如果当前的高度可以直接到地面)

vis[now_wood][0]=当前高度;

else

vis[now_wood][0]=无穷大;

}

else 

{

if(如果下一块木板的左右端点到地面的距离都已算出)vis[now_wood][0]=min(左,右)+当前位置到下一块木板左(右)的距离

 }

else 

vis[now_wood][0]=当前高度-下一块木板高度+min(LeftMinTime(next_wood)+当前位置到下一块木板左的距离,RightMinTime(next_wood)+当前位置到下一块木板右的距离);



return vis[now_wood][0];//返回当前端点到地面的最短时间

}

贴代码:

 

 

#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
    int x1,x2,h;
    Node(int x1=0,int x2=0,int h=0):x1(x1),x2(x2),h(h){};//初始函数
}p[1005];//存储各个木板的信息
int N,MAX_H;
int vis[1005][2];//记忆每个端点到地面的最短距离,以免重复搜索,vis[][0]代表左,vis[][1]代表右
int LeftMinTime(int n);
int RightMinTime(int n);
bool cmp(Node a,Node b)
{
    return a.h>b.h;
}
int searchLeft(int n)//寻找下一块木板
{
    for(int i=n+1;i<N+1;i++)
    {
        if(p[i].x1<=p[n].x1&&p[i].x2>=p[n].x1&&abs(p[n].h-p[i].h)<=MAX_H)
        return i;
    }
    return -1;//没找到返回-1
}
int searchRight(int n)
{
    for(int i=n+1;i<N+1;i++)
    {
        if(p[i].x1<=p[n].x2&&p[i].x2>=p[n].x2&&abs(p[n].h-p[i].h)<=MAX_H)
        return i;
    }
    return -1;
}
int LeftMinTime(int n)//n是当前木板,m是下一块木板
{
    int m=searchLeft(n);
    if(m==-1)//没有木板匹配
    {
        if(p[n].h>MAX_H)//到不了
        vis[n][0]=9999999;
        else
        vis[n][0]=p[n].h;
    }
    else
    {
        if(vis[m][1]||vis[m][0])//如果下一个木板左右端点到地面的距离都已算出的话
        //直接在该基础上加上当前端点到下一个木板左或右端点的距离,然后取最小值
        vis[n][0]=p[n].h-p[m].h+min(vis[m][0]+abs(p[n].x1-p[m].x1),vis[m][1]+abs(p[n].x1-p[m].x2));
        else
        vis[n][0]=p[n].h-p[m].h+min(LeftMinTime(m)+abs(p[n].x1-p[m].x1),RightMinTime(m)+abs(p[n].x1-p[m].x2));
    }
    return vis[n][0];
}
int RightMinTime(int n)
{
    int m=searchRight(n);
    if(m==-1)
    {
        if(p[n].h>MAX_H)
        vis[n][1]=9999999;
        else
        vis[n][1]=p[n].h;
    }
    else
    {
        if(vis[m][1]||vis[m][0])vis[n][1]=p[n].h-p[m].h+min(vis[m][1]+abs(p[n].x2-p[m].x2),vis[m][0]+abs(p[n].x2-p[m].x1));
        else
        vis[n][1]=p[n].h-p[m].h+min(RightMinTime(m)+abs(p[n].x2-p[m].x2),LeftMinTime(m)+abs(p[n].x2-p[m].x1));
    }
    return vis[n][1];
}
int main()
{
    int ncase;
    cin>>ncase;
    while(ncase--){
        memset(vis,0,sizeof(vis));
        int X,H;
        cin>>N;
        cin>>X>>H>>MAX_H;
        for(int i=1;i<=N;i++)
        {
            int x1,x2,h;
            cin>>x1>>x2>>h;
            Node u(x1,x2,h);
            p[i]=u;
        }
        Node u(X,X,H);//初始位置假设左右端点都在一点x
        p[0]=u;
        sort(p,p+N+1,cmp);//按高度大到小排序木板
        RightMinTime(0);
        LeftMinTime(0);
        cout<<vis[0][0]<<endl;
    }
    return 0;
}

 

 

 

 

 

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

相关推荐

矩阵连乘实验代码

南邮动态规划法实验之矩阵连乘问题,使用了备忘录法以及动态规划法实现求解,代码注释详尽

【数据结构与算法】三个经典案例带你了解动态规划

我们在面对很多问题时,会通过递归去解决问题,虽然递归的代码写起来非常的简洁,但效率不高,无法高效地将递归的代码转化成机器代码。 递归的思想是通过从问题的顶部开始,不断解决其中的小问题,使得问题得以解决 ;而我们本文要讲的动态规划的思想正好和递归的思想相反,其主要思想是先从一个个小问题开始解决,直到所有小问题都解决了,整个问题就得以解答。

零一的博客 1万+

poj上的一些基础题分类ac源代码和测试数据样例

本人的一些poj基础训练题,主要包括图论,大数,二叉搜索,DP,搜索,hash等内容的入门题的ac源代码,代码风格容易模仿,适合acm入门级爱好者,题目涵盖范围对于入门者大约需要3至6个月左右的学习时间(有acm参加经验者和大牛们请无视本资源,别浪费分了)

动态规划测试test20170520

前言这次考试幸好看过棋盘型dp的相关文章(然后发现第三题做过),于是第一题在打表找规律下加乱搞得到递推式,然后就发现还要高精,然后打压位高精过了。第二题明知道是转化为单调队列下的多重背包处理,可是不会打,然后就爆0了。试题罗大师的棋盘(chessboard.pas/c/cpp)Time:0.05s Memory:256M【问题描述】 罗大师有一个 8*8 的棋盘。有一天罗大师有点无聊,于是想将这

farandnear的博客 451

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8828

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 261

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

触摸延时灯课程设计

Multisim源文件下载: 实验名称:­­­­­­­­­­­­­­­­­­­ 课程设计1:触摸延时灯仿真设计 设计要求: 利用单稳态触发器设计触控延时灯,要求利用触发波形的边沿模拟触控点实现触发,触发后3秒灯亮,灯可以亮的时间可在5-10秒之间可调。 设计思路: 利用集成单稳态触发器CD4098设计简易的触摸延时灯电路。应用CD4098可以实现脉冲延时,原理图如下。4脚未触发信号输入端,可通过比较器对触摸产生的信号进行比较后再产生触发信号,使触发准确度得以提高。...

m0_54240221的博客 1万+

POJ 1661 Help Jimmy 【DP ?】

话说,写的好差劲,好乱,中间老是写错。、思路就是从上往下模拟  T_ T, 貌似算法很挫。 对于每块板设置属性,x1(左端点),x2(右端点), h(高度), t1(从起点到达左端点 的最短时间), t2(从起点到右端点的最短时间),将起点视为一块左右端点相同的板,地面视为左右

我辈皆愚 1032

NE555构成多谐振荡器及三角波、正弦波的生成(附工程文件)

NE555构成多谐振荡器及三角波、正弦波的生成 续上一篇:NE555基本原理及相关公式的推导

qq_49979053的博客 5万+

STM32驱动AD2S1210实现旋变解码与角度读取

旋转变压器作为一种耐高温、抗振动的角度传感器,在工业伺服、机器人关节和电动汽车电驱等场景中占据重要地位。其输出信号需要经过专用转换芯片处理才能被MCU高效使用。AD2S1210是一款典型的旋变数字转换器(RDC),内部采用Type II型跟踪环,将模拟SIN/COS信号实时解算为数字角度与速度,降低了处理器负担并提升抗干扰能力。本文基于STM32平台,详细介绍了AD2S1210的硬件接线、SPI通信配置、寄存器初始化流程,以及读取位置数据时的SAMPLE脉冲时序等关键实现。同时总结了常见故障如全FF、角度跳

weixin_34194829的博客 193

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

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

Sky丨Star的博客 489

AI在电商中的搜索优化

自拟标题 《AI技术助力电商搜索优化:深度解析一线大厂面试题及算法编程实践》 概述 随着人工智能技术的不断发展,AI在电商搜索优化中的应用日益广泛。本文将围绕“AI在电商中的搜索优化”这一主题,介绍国内头部一线大厂如阿里巴巴、百度、腾讯、字节跳动等在面试中常见的AI相关面试题和算法编程题,并提供详尽的答案解

AI天才研究院 912

poj 1661 Help Jimmy-dp 动态规划

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

白黑菜的博客 217

FPGA经验谈系列文章——3、逻辑级数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Xilinx FPGA开发tips系列——前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的

gzy0506的博客 1万+

【2026年华为暑期实习-非AI方向(通软&嵌软&测试&算法&数据科学)- 7月15日-第二题- 手机多载波冲突选择】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文提出了一种解决手机基站载波选择问题的回溯算法。给定N个载波,每个载波具有带宽和所属频段,要求选择最多K个载波,满足:1) 不选择同一频段的多个载波;2) 不选择冲突频段的载波;3) 总带宽最大化。算法通过预处理冲突关系,使用位掩码优化冲突检查,按编号顺序回溯枚举所有可能组合。当找到更大带宽或相同带宽但字典序更小的组合时更新答案。该方法在N≤25和K≤8的约束下高效可行,并通过样例验证了正确性。输出为最大总带宽和对应的最优载波编号序列。

m0_73659489的博客 71

POJ 1661 Help Jimmy(C)动态规划

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

wowpH 273

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ 1661 help Jimmy 动态规划

总时间限制: 1000ms 内存限制: 65536kB 描述 “Help Jimmy” 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开...

LiO_Liu的博客 271

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

POJ - 1661 Help Jimmy 【动态规划】

题目链接:http://poj.org/problem?id=1661 Time Limit:1000MS Memory Limit:10000K Description "Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下...

MengHao的博客 204

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj-1661 Help Jimmy 动态规划

题目链接poj-1661 Help Jimmy题目Help JimmyTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 13143 Accepted: 4363Description"Help Jimmy" 是在下图所示的场景上完成的游戏。 场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老...

iwts 399

动态规划小题整理2(最佳加法表达式,Help Jimmy(POJ1661),滑雪(OpenJudge百练1088))

目录 一、最佳加法表达式 二、Help Jimmy(POJ1661) 三、滑雪(OpenJudge百练1088) 一、最佳加法表达式 题意: 有一个由1..9组成的数字串.问如果将m个加 号插入到这个数字串中,在各种可能形成的 表达式中,值最小的那个表达式的值是多少。样例输入: 5 3 1 2 3 4 5 输出 : 24 分析: 假定数字串长度是n,添完加号...

an94460061的博客 620

Poj-1661 Help Jimmy(动态规划)

Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9527   Accepted: 3079 Description "Help Jimmy" 是在下图所示的场景上完成的游戏。  场景中包括多个长度和高度各不相同的平台。地面是最低的平台

Russian_Blue_Cat的博客 450

poj 1661 Help Jimmy 动态规划

题意:有n个平台,每个平台给出左端点x1,右端点x2,高度h,jimmy从坐标(X,Y)下落,下落速度和平台移动速度为1m/s,最大下落高度不超过mmax,求到地面的最短时间。 按平台高度排序,从高到低遍历。若平台i上有平台j的高度差小于mmax,左端点或右端点没有被i与j之间的平台覆盖,且范围在平台I的区间中,则更新掉到平台i左右端点的时间,并覆盖平台j的左端点或右端点。d[i][0],d[i

弱菜zc 688

POJ 1661 HELP JIMMY 动态规划

解题思路 此题目的“子问题”是什么呢?Jimmy 跳到一块板上后,可以有两种选择,向左走,或 向右走。走到左端和走到右端所需的时间,是很容易算的。如果我们能知道,以左端为起点 到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左走还是向右走,就很 容选择了。因此,整个问题就被分解成两个子问题,即Jimmy 所在位置下方第一块板左端 为起点到地面的最短时间,和右端为起点到地面的最

Lemon_Chen 2974

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

Help Jimmy  POJ - 1661  题意:大致是一个人从某个点开始下落,下落的速度是1m/s,然后在平台上的时候可以左右移动,移动的速度也是1m/s,但是这里有一个限制,就是说每次下落的距离不能超过一个给定的数值。问你从起始点下落到地板最少需要多少s。 题解,这道题我看到的时候第一感觉是最短路,建图方法就是对于每一个平台的两个端点(编号为2*i+1和2*i+2),考虑

SUNSET 353
上一篇: POJ1088滑雪问题 简单dp(动态规划)已AC
下一篇: POJ1979 /Openjudge1818 Red and Black解题报告(深度优先搜索,图的遍历)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值