POJ 1661 Help Jimmy
来源:互联网 发布:淘宝网男式内衣衬衫 编辑:程序博客网 时间:2024/04/29 11:33
题目链接:http://poj.org/problem?id=1661
联动:http://blog.csdn.net/csdn364988181/article/details/48208349
题意:场景中有n个平台,角色从某个地方下落,到达地面结束,从一个平台到另一个平台不可以超过max,不然摔死,在平台上移动速度是1m/s,下落的速度也是1m/s,问最快到达地面要多少
思路:立刻想到了之前用线段树处理每一个平台左右落点的题目(联动hdu3016的题解),但是这一题数据比较小,直接暴力判断落点就可以了,递推的方式特有些不一样,但大体上思路是一样的,一个平台只能选择左右2个地方下落,按高度进行排序一直递推上去就可以了,[0,10]的平台是可以从右侧落到[10,100]上的逻辑(一开始我没在意,不过有人写的题解抱怨了这个逻辑)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define inf 0x3f3f3f3fusing namespace std;struct Node{ int xl,xr,h;}s[1030];int lim,n;int dp[1030][5];bool cmp(Node p,Node q){ return p.h<q.h;}void Leftmintime(int now){ int tmp=now-1; while (tmp>0 && s[now].h-s[tmp].h <= lim) { if (s[now].xl >= s[tmp].xl && s[now].xl <= s[tmp].xr) { int mintim=min(s[now].xl-s[tmp].xl+dp[tmp][0],s[tmp].xr-s[now].xl+dp[tmp][1]); dp[now][0]=s[now].h-s[tmp].h+mintim; return; } else tmp--; } if (s[now].h > lim) dp[now][0]=inf; else dp[now][0]=s[now].h; return;}void Rightmintime(int now){ int tmp=now-1; while (tmp>0 && s[now].h-s[tmp].h <= lim) { if (s[now].xr >= s[tmp].xl && s[now].xr <= s[tmp].xr) { int mintim=min(s[now].xr-s[tmp].xl+dp[tmp][0],s[tmp].xr-s[now].xr+dp[tmp][1]); dp[now][1]=s[now].h-s[tmp].h+mintim; return; } else tmp--; } if (s[now].h > lim) dp[now][1]=inf; else dp[now][1]=s[now].h; return;}int solve(){ for (int i=1;i<=n+1;i++) {//cout<<":"<<endl; Leftmintime(i); Rightmintime(i); } int res=min(dp[n+1][0],dp[n+1][1]); return res;}int main(){ int t,x,y; scanf("%d",&t); while (t--) { scanf("%d%d%d%d",&n,&x,&y,&lim); for (int i=1;i<=n;i++) { scanf("%d%d%d",&s[i].xl,&s[i].xr,&s[i].h); } s[0].xl=-inf; s[0].xr=inf; s[0].h=0; s[n+1].xl=x; s[n+1].xr=x; s[n+1].h=y; sort(s,s+n+1,cmp); int res=solve(); printf("%d\n",res); }}
0 0
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- Poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- POJ 1661 Help Jimmy
- poj 1661 Help Jimmy
- POJ 1661 Help Jimmy
- Gradle Android目录结构兼容设置
- Json概述以及python对json的相关操作
- JSON字符串转换成Map对象
- 测试 arduino pro mini 的 PWM
- 01-FTP
- POJ 1661 Help Jimmy
- 每一个css样式写完都要写分号!!!
- 找出N内的所有完数
- websphere性能优化方案
- 写给刚加入的朋友 Java篇
- 写给刚加入的朋友 iOS篇 占位符
- 利用反射写个类方法提取器及RTTI和反射的区别
- 关于 [UITableView _configureCellForDisplay:forIndexPath:]断言失败问题接解决
- 怎样招聘程序员