poj1661 (DP)
题目链接: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)的更多相关文章
- Help Jimmy ~poj-1661 基础DP
Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开始下落, ...
- kuangbin专题十二 POJ1661 Help Jimmy (dp)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14214 Accepted: 4729 Descr ...
- poj1661【DP,左右两端dp】
/* [过滤这一段~~~] 一开始想的[错误的,为自己的总结的写的,读者略过]: 每个状态的点肯定是高度,那么我DP每一层,这样的话就有一层循环,其实这无关复杂度,不会很多时间 错误的是想法是从最高层 ...
- POJ1661 Help Jimmy —— DP
题目链接:http://poj.org/problem?id=1661 Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ1661(KB12-M DP)
Help Jimmy Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无 ...
- Help Jimmy POJ - 1661 数字三角DP
题意:中文 https://vjudge.net/problem/POJ-1661 题解:设两个dp数组,dpl[i]存 从第i块板左边到地上所花的最短时间,dpr[i]存右边的. 将所有板按高度排序 ...
- 「kuangbin带你飞」专题十二 基础DP
layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...
- POJ-1661-Help Jimmy(DP, 递推)
链接: https://vjudge.net/problem/POJ-1661 题意: "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
随机推荐
- 峰Spring4学习(2)依赖注入的几种方式
一.装配一个bean 二.依赖注入的几种方式 com.cy.entity People.java: package com.cy.entity; public class People { pri ...
- jenkins 定时构建 位置
定时器构建语法 * * * * * 星号中间用空格隔开 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三个*表示一个月的第几天,取值1~31 第四个*表示第几月,取值1~12 第五 ...
- Java堆外内存之三:堆外内存回收方法
一.JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里. 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面 ...
- 1016 Phone Bills (25 分)
1016 Phone Bills (25 分) A long-distance telephone company charges its customers by the following rul ...
- stm32串口接收完整的数据包
参考了文章:<stm32串口中断接收方式详细比较> 文章地址:http://bbs.elecfans.com/jishu_357017_1_1.html 借鉴了第四种中断方式 串口的配置这 ...
- PHP mysqli_autocommit() 函数
定义和用法 mysqli_autocommit() 函数开启或关闭自动提交数据库修改. 提示:请查看 mysqli_commit() 函数,用于提交指定数据库连接的当前事务.请查看 mysqli_ro ...
- jps命令发生异常
当在集群里输入jps命令时报如下错误: 我就开始检查jdk,感觉应该是centos自动的jdk没卸载干净跟后面安装的jdk冲突 先通过命令 rpm -qa|grep java 查看jdk信息 把这几个 ...
- multiprocess模块---进程---进程队列
首先明白几个概念: 同步:做完一件事情,再做另外一件事情 异步:做一件事情的时候,可以再做另外一件事情 阻塞:recv sleep accept input recvfrom 非阻塞:没有遇见上面这 ...
- java开发-问题清单
本人是做Java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些 1. junit用法,before,before ...
- python3中的mysql数据库操作
软硬件环境 OS X EI Capitan Python 3.5.1 mysql 5.6 前言 在开发中经常涉及到数据库的使用,而python对于数据库也有多种解决方法.本文以python3中的mys ...