[DP] POJ 1661
来源:互联网 发布:韩国股市行情软件下载 编辑:程序博客网 时间:2024/06/08 03:50
题意
Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy***每次下落的高度不能超过MAX米*,不然就会摔死,游戏也会结束
思路
自己的思路本来是每个板子存两个时间,然后分别对两个端点dp
写出来的话差不多就这个样http://blog.csdn.net/yukizzz/article/details/51063447###;然后看了dalao的博客
直接一个点开左右两维,同时找到左右下方的点,同时对左右做dp
666
dp[i][0] = min(dp[k][0]+l[i]-l[k], dp[k][1]+r[i]-l[k]) + h[i]-h[k]; (左左和左右取最小)
dp[i][1] = min(dp[k][0]+r[i]-l[k], dp[k][1]+r[i]-r[k]) + h[i]-h[k];(右左和右右取最小)
要注意对下方直接为地面的台层的特殊处理,以及应当注意的细节题目都已说明,已在上面标记。
代码
#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <queue>#include <stack>#define N 1005#define INF 0x7f7f7f7fusing namespace std;struct Node { int l, r, h; //按高度排序 bool operator< ( const Node &t ) const { return h < t.h; }} node[ N ];int dp[ N ][ 2 ];int main () { int T; cin >> T; while ( T-- ) { int n, x, y, mx; cin >> n >> x >> y >> mx; memset ( dp, INF, sizeof ( dp ) ); // INpt for ( int i = 0; i < n; ++i ) cin >> node[ i ].l >> node[ i ].r >> node[ i ].h; node[ n ].l = x, node[ n ].r = x, node[ n ].h = y; //按从小到大高度排序 sort ( node, node + n ); for ( int i = 0; i <= n; ++i ) { //找到左右两个端点下方合适的板子 int lp, rp; lp = rp = -1; for ( int k = i - 1; k >= 0; --k ) { if ( lp == -1 && node[ k ].l <= node[ i ].l && node[ k ].r >= node[ i ].l ) lp = k; if ( rp == -1 && node[ k ].l <= node[ i ].r && node[ k ].r >= node[ i ].r ) rp = k; } //下面没有板子且高度<max if ( lp == -1 && node[ i ].h <= mx ) dp[ i ][ 0 ] = node[ i ].h; if ( rp == -1 && node[ i ].h <= mx ) dp[ i ][ 1 ] = node[ i ].h; //左端点 if ( lp != -1 && node[ i ].h - node[ lp ].h <= mx ) dp[ i ][ 0 ] = min ( dp[ lp ][ 0 ] + node[ i ].l - node[ lp ].l, dp[ lp ][ 1 ] + node[ lp ].r - node[ i ].l ) + node[ i ].h - node[ lp ].h; if ( rp != -1 && node[ i ].h - node[ rp ].h <= mx ) dp[ i ][ 1 ] = min ( dp[ rp ][ 0 ] + node[ i ].r - node[ rp ].l, dp[ rp ][ 1 ] + node[ rp ].r - node[ i ].r ) + node[ i ].h - node[ rp ].h; } printf ( "%d\n", dp[ n ][ 1 ] ); } return 0;}
阅读全文
0 0
- poj 1661 DP
- POJ 1661 DP
- POJ--1661(DP)
- POJ 1661 (DP)
- [DP] POJ 1661
- POJ 1661 Help Jimmy 【DP ?】
- POJ--1661--Help Jimmy--DP
- poj-1661 Help Jimmy 【DP】
- POJ - 1661 Help Jimmy(DP)
- DP-POJ-1661-Help Jimmy
- POJ 1661Help Jimmy(dp)
- POJ 1661 Help Jimmy【DP】
- poj 1661 help Jimmy(dp)
- poj 1661 Help Jimmy(dp)
- POJ 1661 Help Jimmy (DP)
- POJ 1661 Help Jimmy dp
- POJ 1661 Help Jimmy【DP】
- poj dp
- Python 中的枚举类型
- 动手写一个炫酷的城市导航列表
- 准备继续更新这个博客了
- Codeforces Round #451 (Div. 2) Proper Nutrition 暴力枚举
- 11.26
- [DP] POJ 1661
- HLS流媒体协议介绍
- 求助!长光卫星地信笔试题!
- 12.6
- 记录自己的django
- 009
- Sql镜像同步卡死的一个案例
- loj6224「网络流 24 题」深海机器人问题(费用流)
- 递归函数