Help Jimmy--poj1661(dp)
题目链接:http://poj.org/problem?id=1661
下图是左边的,右边的同理:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 1100
#define INF 0xffffff
struct node
{
int L, R, H;
} a[N];
int cmp(node p, node q)
{
return p.H > q.H;
}
int main()
{
int T, n, x, y, m,dp[N][];
scanf("%d", &T);
while(T--)
{
scanf("%d %d %d %d", &n, &x, &y, &m);
for(int i=; i<=n; i++)
{
scanf("%d %d %d", &a[i].L, &a[i].R, &a[i].H);
dp[i][] = dp[i][] = INF;
}
int ans=INF;
a[].L = x;
a[].R = x;
a[].H = y;
sort(a, a+n+, cmp);///按高度排序; a[n+].L = -;
a[n+].R = ;
a[n+].H = ;///地面; dp[][] = dp[][] = ;
for(int i=; i<=n; i++)
{
int LL=, RR=;///LL和RR用于标记从第i块木板左右两端下落是否找到了下一个落脚点
for(int j=i+; j<=n+; j++)
{
if( (!LL&&!RR) || (a[i].H-a[j].H>m) )///当不满足高度或者已经有下一落点时就可以跳出来了;
break;
if(a[i].L>=a[j].L && a[i].L<=a[j].R && a[i].H!=a[j].H && LL)///当i从左边下落到下一平台j时;
{
LL=;///已经在左边找到落点;
if(j==n+)///如果落点为地面就可以取最小值了;
ans=min(ans, dp[i][]);
else///否侧就。。。画个图,一眼就看明白了;
{
dp[j][]=min(dp[j][], dp[i][]+(a[i].L-a[j].L));
dp[j][]=min(dp[j][], dp[i][]+(a[j].R-a[i].L));
}
}
if(a[i].R>=a[j].L && a[j].R>=a[i].R && a[i].H!=a[j].H && RR)///和上面同理;
{
RR=;
if(j==n+)
ans=min(ans, dp[i][]);
else
{
dp[j][]=min(dp[j][], dp[i][]+(a[i].R-a[j].L));
dp[j][]=min(dp[j][], dp[i][]+(a[j].R-a[i].R));
}
}
}
}
printf("%d\n", ans+y);
}
return ;
}
Help Jimmy--poj1661(dp)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
- 最长公共子序列长度(dp)
/// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...
- Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings)
Leetcode之动态规划(DP)专题-647. 回文子串(Palindromic Substrings) 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子 ...
随机推荐
- 硬件相关-ADC原理(未完成)
一.模数转换的一般步骤: 1)采样和保持 为了把模拟信号转换成对应的数字信号,必须首先将模拟量每隔一定时间抽取一次样值,使时间上连续变化的模拟量变为一个时间上断续变化的模拟量,这个过程称为采样. 为了 ...
- [shell基础]——数组
数组赋值 1. 逐个数组元素赋值 # array[0]=11 # array[1]=22 # array[2]=33 # echo ${array[@]} 11 22 33 33 2. array( ...
- Bootstrap入门四:代码
1.内联代码 code: 通过 <code> 标签包裹内联样式的代码片段.灰色背景.灰色边框和红色字体. For example, <code><section>& ...
- Bootstrap入门二:响应式页面布局
Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...
- Python中的List,Tuple,Dic,Set
Python中的List,Tuple,Dic,Set List定义 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推 ...
- 【转】android ListView 几个重要属性
android ListView 几个重要属性 分类: Android2012-03-08 19:25 19324人阅读 评论(5) 收藏 举报 listviewandroid活动javalistnu ...
- 【转载】oracle 分区表详解
一.分区表的概述: Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见 ...
- max_flow(Edmond_Karp) 分类: ACM TYPE 2014-09-02 10:47 92人阅读 评论(0) 收藏
#include <cstdio> #include <iostream> #include <cstring> #include<queue> usi ...
- 一个包的TcpServer流程
上次说到对于那种有内容的包 bool TCPServer::on_receive_data(int channel_id, void* data, int len) { packet pkt; { p ...
- Nodejs Express 4.X 中文API 2--- Request篇
相关阅读: Express 4.X API 翻译[一] -- Application篇 Express4.XApi 翻译[二] -- Request篇 Express4.XApi 翻译[三] -- ...