poj1661
来源:互联网 发布:协同过滤推荐算法 java 编辑:程序博客网 时间:2024/06/04 00:33
题意:
场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。 计算Jimmy到底地面时可能的最早时间。
解法:dfs。先根据高度将平台从高到低排序。为了统一处理将出发点设置为一个特殊的平台,只是长度为0而已。然后记忆化搜索。注意的是,根据实际情况下落时可以落的地方必须要落下(敲的时候自己逗比了一番)。
代码:
#include <iostream>#include <stdio.h>#include <cstring>#include <vector>#include <algorithm>using namespace std;struct point{ int x1,x2,y;} points[1010];bool operator<(const point& a,const point& b){ return a.y>b.y;}int N,X,Y,MAX;int num[1010][2];int dfs(int i,int a,int x){ if(num[i][a]!=-1) return num[i][a]; int left=100000000,right=100000000; bool flag=true; for(int j=i+1;j<=N;j++) { if(points[i].y-points[j].y>MAX) {flag=false;break;} if(x>=points[j].x1&&x<=points[j].x2){ left=dfs(j,0,points[j].x1)+points[i].y-points[j].y+x-points[j].x1; right=dfs(j,1,points[j].x2)+points[i].y-points[j].y+points[j].x2-x; flag=false; break; } } num[i][a]=min(left,right); if(flag&&points[i].y<=MAX) num[i][a]=points[i].y; return num[i][a];}int main(){ int t; cin>>t; while(t--) { memset(num,-1,sizeof num); scanf("%d%d%d%d",&N,&X,&Y,&MAX); points[0].x1=X;points[0].x2=X;points[0].y=Y; for(int i=1;i<=N;i++) scanf("%d%d%d",&points[i].x1,&points[i].x2,&points[i].y); sort(points,points+N+1); cout<<dfs(0,1,X)<<endl; } return 0;}/*13 8 17 200 10 130 10 84 14 3*/
0 0
- poj1661
- poj1661
- POJ1661
- POJ1661 神坑卧槽!!
- [DP] POJ1661
- poj1661 记忆化搜索
- poj1661 Word Puzzles
- poj1661 Help Jimmy
- poj1661:Help Jimmy
- POJ1661---Help Jimmy
- 【poj1661】Help Jimmy
- poj1661 经典dp
- poj1661(递推+模拟)
- dp 略难 poj1661
- POJ1661-Help Jimmy
- POJ1661(DP)
- poj1661 最短路
- 北大ACM poj1661 Help Jimmy
- 单链表的环检测算法
- Wildcard Matching
- CryptLib
- CentOS 6.5安装Nvidia显卡驱动
- poj1190,DFS/已知一个等式,求另一个最小值
- poj1661
- UVa:11100 The Trip, 2007
- asp.net CMS无法打开虚拟目录
- HTTP跳转
- JAVA的字符串拼接和性能
- 2014寒假训练计划
- Qin Shi Huang's National Road System(次小生成树)
- poj-1042 && nyoj-30(Gone fishing)
- awk 计算两个数的百分比