/*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的更多相关文章

  1. POJ 1661 Help Jimmy(C)动态规划

    没刷过 POJ,这题是论坛有人问的,我才看看. 我发现 POJ 注册很奇怪,账号总是登不上去,弄的我还注册两个.Emmm 首次体验很差,还好我不在 POJ 刷题. 题目链接:POJ 1661 Help ...

  2. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  3. POJ 1661 Help Jimmy -- 动态规划

    题目地址:http://poj.org/problem?id=1661 Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度 ...

  4. OpenJudge/Poj 1661 帮助 Jimmy

    1.链接地址: bailian.openjudge.cn/practice/1661 http://poj.org/problem?id=1661 2.题目: 总Time Limit: 1000ms ...

  5. POJ 1661 Help Jimmy(二维DP)

    题目链接:http://poj.org/problem?id=1661 题目大意: 如图包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的 ...

  6. POJ - 1661 - Help Jimmy - 简单dp

    http://poj.org/problem?id=1661 一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性.dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从 ...

  7. POJ 1661 Help Jimmy【DP】

    基础DP,过程想明白了其实也不复杂,从上面的推下面的比倒着推要简单很多.调试了半个多小时..简单dp依然不能快速AC..SAD.. 题目链接: http://poj.org/problem?id=16 ...

  8. POJ 1661 Help Jimmy LIS DP

    http://poj.org/problem?id=1661 对板按高度排序后. dp[i][0]表示现在站在第i块板上,向左跑了,的状态,记录下时间和其他信息. O(n^2)LIS: 唯一的麻烦就是 ...

  9. POJ 1661 Help Jimmy(DP,注意边界)

    Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9399   Accepted: 3025 Descri ...

  10. POJ 1661 Help Jimmy(DP/最短路)

    Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14980 Accepted: 4993 Descripti ...

随机推荐

  1. 预告:准备开个坑,集中学习一下esp32模块

    对这个模块有兴趣的可以关注我以后的更新,寒假会抽空写几篇心得.

  2. tableView的基本使用(改良版)

    @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> { int i;//用来计算接受通知的次数 ...

  3. Contest2037 - CSU Monthly 2013 Oct (Problem J: Scholarship)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=9 [题解]: 这题卡了一下,卡在负数的情况,负数输出 0 这题主要找到一 ...

  4. 1003: [ZJOI2006]物流运输trans - BZOJ

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  5. 数据生成器Bogus的使用以及基于声明的扩展

    引言 最近在整理代码,发现以前写的一个数据填充器写了一半没实现,而偏偏这段时间就要用到类似的功能,所以正好实现下. 目标 这个工具的目标是能够在项目初期快速搭建一个"数据提供器", ...

  6. 使用Redis构建简单的ORM

    Reids相关的资料引用 http://www.tuicool.com/articles/bURJRj [Reids各种数据类型的应用场景] https://github.com/antirez/re ...

  7. Recommender Systems 基于知识的推荐

    前两章的协同过滤和就内容的推荐都建立在“大量数据”的基础上,运用概率方法来进行计算和预测.不过,在现实生活中,有些物品,如:汽车.房屋.计算机,用户不会频繁的消费.如何在这种情况下对用户进行推荐? 这 ...

  8. ural 1233

    可以推出规律  每一个数第一次出现的位置 和 n*10后出现的位置  要特殊考虑 是10的倍数的情况(10,100,1000, .......) 它的位置是不会改变的 #include<cstd ...

  9. 详细解析: VictorOps 是如何利用和完善 ChatOps?

    ChatOps,即聊天应用,在软件开发中被广泛应用改进开发者之间的沟通.简单地说,ChatOps 是将内容或行动 (或两者) 迁移到聊天客户端.这样做之后,企业内的所有团队都能分享重要信息,行动,及其 ...

  10. 解决ListView 跟ScroolView 共存 listItem.measure(0, 0) 空指针

    在网上找到ListView 和ScroolView 共存的方法无非是给他每个listview 重新增加高度,但是android 的设计者始终认为这并不是一种好的实现方法.但是有的时候有必须要用这种蛋疼 ...