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

思路:

把初始位置看成左,右端点均为x0,即长度为0,高度为y0的一个平台,按照平台高度从低到高排序。用dp[i][0],dp[i][1]分别表示从第i个平台的左端,右端到地面的最短时间。tmp=get_next(i,0)表示第i个平台左端点下的平台的编号(若为-1表示下方已无平台),同理tmp=get_next(i,1)表示第i个平台右端点下的平台编号。因为求最小值,所以要将dp初始化为inf,因此状态转移方程如下(注意若下降高度大于Max,则不处理,即dp[i][j]等于inf):

if(tmp>=0){
                    if(a[i].h-a[tmp].h<=Max)
                        dp[i][j]=a[i].h-a[tmp].h+min(dp[tmp][0]+a[i].x[j]-a[tmp].x[0],dp[tmp][1]+a[tmp].x[1]-a[i].x[j]);
                }
                else{
                    if(a[i].h<=Max)
                        dp[i][j]=a[i].h;
                }
详见代码:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; struct node{
int x[],h;
}a[]; bool cmp(node xx,node yy){
return xx.h<yy.h;
} int T,n,x0,y0,Max;
int dp[][]; int get_next(int p,int k){
int q=p-;
for(;q>=;--q)
if(a[q].h<a[p].h&&a[p].x[k]>=a[q].x[]&&a[p].x[k]<=a[q].x[])
break;
return q;
} int main(){
scanf("%d",&T);
while(T--){
memset(dp,0x3f,sizeof(dp));
scanf("%d%d%d%d",&n,&x0,&y0,&Max);
a[n].x[]=a[n].x[]=x0,a[n].h=y0;
for(int i=;i<n;++i)
scanf("%d%d%d",&a[i].x[],&a[i].x[],&a[i].h);
sort(a,a+n,cmp);
int tmp;
for(int i=;i<=n;++i)
for(int j=;j<;++j){
tmp=get_next(i,j);
if(tmp>=){
if(a[i].h-a[tmp].h<=Max)
dp[i][j]=a[i].h-a[tmp].h+min(dp[tmp][]+a[i].x[j]-a[tmp].x[],dp[tmp][]+a[tmp].x[]-a[i].x[j]);
}
else{
if(a[i].h<=Max)
dp[i][j]=a[i].h;
}
}
printf("%d\n",dp[n][]);
}
return ;
}

poj1661 (DP)的更多相关文章

  1. Help Jimmy ~poj-1661 基础DP

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

  2. kuangbin专题十二 POJ1661 Help Jimmy (dp)

    Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14214   Accepted: 4729 Descr ...

  3. poj1661【DP,左右两端dp】

    /* [过滤这一段~~~] 一开始想的[错误的,为自己的总结的写的,读者略过]: 每个状态的点肯定是高度,那么我DP每一层,这样的话就有一层循环,其实这无关复杂度,不会很多时间 错误的是想法是从最高层 ...

  4. POJ1661 Help Jimmy —— DP

    题目链接:http://poj.org/problem?id=1661 Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  5. POJ1661(KB12-M DP)

    Help Jimmy Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无 ...

  6. Help Jimmy POJ - 1661 数字三角DP

    题意:中文 https://vjudge.net/problem/POJ-1661 题解:设两个dp数组,dpl[i]存 从第i块板左边到地上所花的最短时间,dpr[i]存右边的. 将所有板按高度排序 ...

  7. 「kuangbin带你飞」专题十二 基础DP

    layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...

  8. POJ-1661-Help Jimmy(DP, 递推)

    链接: https://vjudge.net/problem/POJ-1661 题意: "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同 ...

  9. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

随机推荐

  1. maven学习(6)-Maven依赖范围

    一.maven依赖范围: classpath 分为三种:编译classpath , 测试classpath , 运行classpath Scope 选项如下: Compile:编译依赖范围.默认就是c ...

  2. LINUX关机指令

    linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...

  3. 小峰servlet/jsp(1)

    一.scriptlet标签: 通过scriptlet标签我们可以可以在jsp理嵌入java代码: 第一种:<%! %>  可以在里面定义全局变量.方法.类: 第二种:<% %> ...

  4. python + docker, 实现天气数据 从FTP获取以及持久化(五)-- 利用 Docker 容器化 Python 程序

    背景 不知不觉中,我们已经完成了所有的编程工作.接下来,我们需要把 Python 程序 做 容器化 (Docker)部署. 思考 考虑到项目的实际情况,“持久化天气”的功能将会是一个独立的功能模块发布 ...

  5. Nexus3 仓库搭建(基于Docker)

    Nexus Repository OSS 支持的仓库类型 安装方法(使用docker) 命令: sudo docker run -d \ --name nexus3 \ --restart=alway ...

  6. xiao look 知识贴

    从事中医临床近二十年了,多少总是积累了点经验,本来准备将来老了经验更丰富的时候传给子女的,可惜儿子根本不打算学医.在这个论坛里也混了不短了,感觉这里的风气很纯正,也有不少立志于中医的人士.为此,我决定 ...

  7. Python3 os模块应用

    调用模块的实质是运行python代码,比如a.py文件里有函数f(),那么你在调用a模块的时候,实质是运行了a模块里的函数f(),这个时候内存里就有这个函数了,可以直接用,那是不是随便一个py类型的文 ...

  8. MySQL 查看执行的SQL记录

    我们时常会有查看MySQL服务端执行的SQL记录.在MySQL5.1之后提供了支持,通过在启动时加入-l 或者--log选项即可: mysqld -l mysqld --log 在后面的版本(5.1. ...

  9. springboot的一些配置

    spring-boot 1.推荐使用yaml,因为默认的properties需要写更多的前缀 2.使用java -jar 的方式启动jar包的情况下,通过-spring.profiles.actiiv ...

  10. Linux---CentOS 定时运行脚本配置练手

    1.安装crontab yum install vixie-cron yum install crontabs vixie-cron软件包是cron的主程序: crontabs软件包是用来安装.卸装. ...