POJ 1661 Help Jimmy
/*96655 's source code for M
Memory: 8604 KB Time: 63 MS
Language: G++ Result: Accepted
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
short x[],y[],h[];
short xx[],hh[],xcnt,hcnt,d,ww,f;
int dp[][];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,bb,cc,m;
scanf("%d%d%d%d",&n,&bb,&cc,&m);
xcnt=hcnt=;
for(int i=; i<=n; ++i)
{
scanf("%d%d%d",&x[i],&y[i],&h[i]);
xx[xcnt++]=x[i];
xx[xcnt++]=y[i];
hh[hcnt++]=h[i];
}
xx[xcnt++]=bb;
hh[hcnt++]=;
sort(xx,xx+xcnt);
sort(hh,hh+hcnt,cmp);
d=;
for(int i=; i<xcnt; i++)
if(xx[i]!=xx[i-])xx[d++]=xx[i];
xcnt=d,d=;
for(int i=; i<hcnt; i++)
if(hh[i]!=hh[i-])hh[d++]=hh[i];
hcnt=d;
vector<int>a[hcnt+];
memset(dp,-,sizeof(dp));
int ans=0x3f3f3f3f;
for(int i=; i<xcnt; i++)
dp[hcnt-][i]=ans;
for(int i=; i<=n; i++)
{
int id;
for(int j=; j<hcnt; j++)
if(h[i]==hh[j])
{
id=j;
break;
}
int s=lower_bound(xx,xx+xcnt,x[i])-xx;
int t=lower_bound(xx,xx+xcnt,y[i])-xx;
a[id].push_back(s);
a[id].push_back(t);
for(int j=s; j<=t; ++j)
dp[id][j]=ans;
}
f=lower_bound(xx,xx+xcnt,bb)-xx;
for(int i=; i<hcnt; i++)
{
if(dp[i][f]!=-)
{
dp[i][f]=cc-hh[i];
ww=i;
break;
}
}
for(int i=ww; i<hcnt-; ++i)
{
for(int j=; j<xcnt; j++)
{
if(dp[i][j]<ans&&dp[i][j]!=-)
{
int s,t;
for(int k=;k<a[i].size();k+=)
{
if(a[i][k-]<=j&&a[i][k]>=j)
{
s=a[i][k-];
t=a[i][k];
break;
}
}
int l=xx[j]-xx[s],r=xx[t]-xx[j];
dp[i][s]=min(dp[i][s],dp[i][j]+l);
dp[i][t]=min(dp[i][t],dp[i][j]+r); }
}
for(int j=; j<a[i].size(); ++j)
{
int p=a[i][j];
if(dp[i][p]!=-&&dp[i][p]<ans)
{
for(int k=i+; k<hcnt&&hh[i]-hh[k]<=m; k++)
if(dp[k][p]!=-)
{
dp[k][p]=min(dp[k][p],dp[i][p]+hh[i]-hh[k]);
break;
}
}
}
}
for(int i=; i<xcnt; i++)
ans=min(ans,dp[hcnt-][i]);
printf("%d\n",ans);
}
return ;
}
POJ 1661 Help Jimmy的更多相关文章
- POJ 1661 Help Jimmy(C)动态规划
没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...
- POJ 1661 Help Jimmy(递推DP)
思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...
- POJ 1661 Help Jimmy -- 动态规划
题目地址:http://poj.org/problem?id=1661 Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度 ...
- OpenJudge/Poj 1661 帮助 Jimmy
1.链接地址: bailian.openjudge.cn/practice/1661 http://poj.org/problem?id=1661 2.题目: 总Time Limit: 1000ms ...
- POJ 1661 Help Jimmy(二维DP)
题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...
- POJ - 1661 - Help Jimmy - 简单dp
http://poj.org/problem?id=1661 一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性.dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从 ...
- POJ 1661 Help Jimmy【DP】
基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...
- POJ 1661 Help Jimmy LIS DP
http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...
- POJ 1661 Help Jimmy(DP,注意边界)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9399 Accepted: 3025 Descri ...
- POJ 1661 Help Jimmy(DP/最短路)
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14980 Accepted: 4993 Descripti ...
随机推荐
- bnuoj 1053 EASY Problem (计算几何)
http://www.bnuoj.com/bnuoj/problem_show.php?pid=1053 [题意]:基本上就是求直线与圆的交点坐标 [题解]:这种题我都比较喜欢用二分,三分做,果然可以 ...
- Linux find example
find | xargs echo >> x1 find -exec echo {} \; >> x2 1.查找/var目录下属主为root并且属组为mail的所有文件:fin ...
- 4.3 spring-嵌入式beans标签的解析
对于嵌入式的beans标签,想信大家很少使用过,或者接触过,起码,我本人就没用过. 它非常类似于Import标签所提供的功能; 使用如下: <?xml version="1.0&quo ...
- [转载]HTML5 Audio/Video 标签,属性,方法,事件汇总
<audio> 标签属性: src:音乐的URL preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 <audio id=& ...
- zoj 3365
题意 给你一个序列 改变尽可能少的数使其成为公差为一 递增的等差数列 可以将给你的序列减去一个等差数列 即num[i] -= i,若得到的数全部相等, 则说明给你的序列本身就满足条件 则只要寻求n ...
- <span> <div> 局部 keydown ,keyup事件。页面部分div $(document) 无效,可能焦点,添加焦点。
前天改一个bug, js 实现的一个 面板拖拉,左右各两个列表,中间面板画线连接,页面左侧列表选中后,key 事件无效.右侧选中确有效,很奇怪,查看源码,左侧选中后,$(document).on(&q ...
- FiddlerScript开发
1.为Fiddler会话列表添加自定义列 只需要为你的方法(方法名任意)添加BindUIColumn Attribute 就可以添加自定义列到Session List,下面的代码添加Method列到会 ...
- 几款开源的图形界面库(GUI Libraries)
SmartWin++ 遵循BSD许可协议的C++ GUI库,建立在Windows API之上,但仍可以通过使用WineLib在Linux/xNix上使用.也支持Pocket PC和基于Windows ...
- HDU4627+LCM
思路是想到了一些 不过愣是没敢写........... /* 题意:给定一个整数n(2 <= n <= 109),满足a+b=n并且[a,b]的最小公倍数最大. */ #include&l ...
- git 命令整理
记录一些git 命令,以便自己以后查阅 基本命令 1.git add (保存工作区的变动到暂存区) git add . 和git add -A把整个工作区添加到暂存区 2.git commit ( ...