思路:

1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间

2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上

总结:

1. 计算每个板子的 dp[i][0/1] 仅需考虑该板子的直接前驱即可

2. 动规的思想并不很明显

3. 代码中, 两个板子相对位置的判断特别精髓

4. 将地面和初始状态都抽象成一块板子

代码:

#include <iostream>
#include <algorithm>
using namespace std;class board {
public:int x1, x2, h;board(int _x1, int _x2, int _h):x1(_x1), x2(_x2), h(_h){}board() {board(-1,-1,-1);}bool operator <(const board & other) const {return this->h < other.h;}
};const int INF = 0X3F3F3F3F;
const int MAXN = 1010;
int t, N, X, Y, H, MAX;
board boards[MAXN];
int dp[MAXN][2];int mainFunc() {for(int i = 0; i <= N+1; i ++) {for(int j = i-1; j >= 0; j --) {if(boards[i].x1 >= boards[j].x1 && boards[i].x1 <= boards[j].x2) { // i 的左端可以掉落到 j 上int h = boards[i].h - boards[j].h;if(h > MAX) dp[i][0] = INF;else if (j == 0) dp[i][0] = h;else dp[i][0] = min(dp[j][0]+boards[i].x1-boards[j].x1, dp[j][1]+boards[j].x2-boards[i].x1) + h;break;}}for(int j = i-1; j >= 0; j --) {if(boards[i].x2 >= boards[j].x1 && boards[i].x2 <= boards[j].x2) { // i 的右端可以掉到 j 上int h = boards[i].h - boards[j].h;if(h > MAX) dp[i][1] = INF;else if(j == 0) dp[i][1] = h;elsedp[i][1] = min(dp[j][0]+boards[i].x2-boards[j].x1, dp[j][1]+boards[j].x2-boards[i].x2) + h;break;}}}return dp[N+1][1];
}int main() {freopen("E:\\Copy\\ACM\\poj\\1661\\in.txt", "r", stdin);cin >> t;while(t-- >= 1) {cin >> N >> X >> H >> MAX;for(int i = 0; i < N; i ++) {cin >> boards[i].x1 >> boards[i].x2 >> boards[i].h;}boards[N].x1 = -20010, boards[N].x2 = 20010, boards[N].h = 0;boards[N+1].x1 = X, boards[N+1].x2 = X, boards[N+1].h = H;sort(boards, boards+N+2);// mainFunctioncout << mainFunc() << endl;}return 0;
}

  

update 2014年3月16日10:36:58

1. 直接前驱可以预处理得到

转载于:https://www.cnblogs.com/xinsheng/p/3447334.html

POJ 1661 Help Jimmy(递推DP)相关推荐

  1. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

  2. 解题报告:luogu P2272 [ZJOI2007]最大半连通子图(tarjan缩点、递推DP、hash、set判重)

    这时yxc上课时讲解的截图. 一般用到tarjan算法的题目步骤都非常相似: tarjan算法 缩点,建图(这里要判重) 按照拓扑序递推(这里缩点以后逆向就已经是拓扑序了)/ 循环遍历新图求解答案. ...

  3. hdu1978(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1978 分析: 递推DP. dp[][]表示可以到达改点的方法数. 刚开始: 外循环扫描所有点dp[x] ...

  4. 递推DP URAL 1119 Metro

    题目传送门 1 /* 2 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 3 递推DP:仿照JayYe,处理的很巧妙, ...

  5. POJ - 1661 Help Jimmy DP

    题目链接 题意:题意很明了,就是求从最高点最短多长时间到达地面,从板上的移动与空中下落的速度都是1: 做法:我们首先将所有的板子与起点按照,左.右端点,高度存起来,按照高度升序. 然后dp,设dp[i ...

  6. 递推DP HDOJ 5459 Jesus Is Here

    题目传送门 题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=''cff"(j−i) mod 530 ...

  7. 递推DP UVA 1366 Martian Mining

    题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...

  8. POJ 2229 Sumsets(递推,找规律)

    构造,递推,因为划分是合并的逆过程,考虑怎么合并. 先把N展开成全部为N个1 然后合并,因为和顺序无关,所以只和出现次数有关 情况有点多并且为了避免重复,分类,C[i]表示序列中最大的数为2^i时的方 ...

  9. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

最新文章

  1. 谁说女生不能搞IT?一名女程序员的奋斗史
  2. python流量实时统计_Python实现获取nginx服务器ip及流量统计信息功能示例
  3. Java多对多关系示例
  4. 设置环境变量ANDROID_SDK_HOME有什么用?
  5. 计算机网络学习笔记(6. 多路复用)
  6. 实战matlab之文件与数据接口技术,实战MATLAB之文件与数据接口技术
  7. Mac端Java开发分析工具JProfiler 13.0.1
  8. 19.TCP/IP 详解卷1 --- TCP 的交互数据流
  9. VMware虚拟机中 启动Windows XP系统黑屏 的解决
  10. Matlab2017a许可证问题:一直提示激活
  11. https://blog.csdn.net/sxf359/article/details/71082404
  12. 思科模拟器CiscoPacketTracer下载
  13. 军火库(第一期):无线电硬件安全大牛都用哪些利器?
  14. SEO逆东子站生成和权重站提交工具
  15. 嵌入式:ARM相关开发工具概述
  16. sincerit little w and Soda(规律题)
  17. multisim仿真 74LS148D芯片
  18. buildroot教程
  19. 信息中心网络ICN的物联网应用调研
  20. plt绘图—取消坐标轴,边框处理,白边处理,颜色图谱

热门文章

  1. 差分约束系统——建模与求解
  2. 详解RMQ LCA
  3. 最大公因数、最小公倍数、因式分解
  4. STM32中NVIC_SystemReset()函数的作用?什么时候用?
  5. 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记二
  6. oracle:SAVEPOINT(保存点)
  7. 分享Silverlight/WPF/Windows Phone一周学习导读(10月16日-10月22日)
  8. MongoDB trouble shoot sharded clusters
  9. H5实例教学--微信内嵌视频1(案例浅析)
  10. CentOS 6.7安装python3.5