POJ 1661 Help Jimmy
2016-01-20 08:55
351 查看
简单DP,每一条线段记录两个值,到左端点最少时间与到又端点最少时间。按照这个往后推导。
#include<cstdio> #include<cstring> #include<cmath> #include<stack> #include<vector> #include<string> #include<iostream> #include<algorithm> using namespace std; const int maxn=1000+10; int T; int N,X,Y,MAX; struct W { int x1,x2,h; } s[maxn]; int dpLeft[maxn],dpRight[maxn]; bool cmp(const W&a,const W&b) { return a.h>b.h; } int main() { scanf("%d",&T); while(T--) { scanf("%d%d%d%d",&N,&X,&Y,&MAX); s[0].x1=X,s[0].x2=X,s[0].h=Y; for(int i=1; i<=N; i++) scanf("%d%d%d",&s[i].x1,&s[i].x2,&s[i].h); s[N+1].x1=-0x7fffffff,s[N+1].x2=0x7FFFFFFF,s[N+1].h=0; for(int i=0; i<=N+1; i++) dpRight[i]=dpLeft[i]=0x7fffffff; sort(s+1,s+N+1,cmp); dpLeft[0]=0,dpRight[0]=0; int ans=0x7FFFFFFF; for(int i=0; i<=N; i++) { //从左端下落 if(dpLeft[i]!=0x7fffffff) { for(int j=i+1; j<=N+1; j++) { if(s[j].x1<=s[i].x1&&s[i].x1<=s[j].x2) { if(s[i].h-s[j].h<=MAX) { if(j==N+1) { int cost=dpLeft[i]+s[i].h-s[j].h; ans=min(ans,cost); } else { int cost; //到左端需要的时间 cost=dpLeft[i]+s[i].h-s[j].h+s[i].x1-s[j].x1; dpLeft[j]=min(cost,dpLeft[j]); //到右端需要的时间 cost=dpLeft[i]+s[i].h-s[j].h+s[j].x2-s[i].x1; dpRight[j]=min(cost,dpRight[j]); } } break; } } } //往右跑 if(dpRight[i]!=0x7fffffff) { for(int j=i+1; j<=N+1; j++) { if(s[j].x1<=s[i].x2&&s[i].x2<=s[j].x2) { if(s[i].h-s[j].h<=MAX) { if(j==N+1) { int cost=dpRight[i]+s[i].h-s[j].h; ans=min(ans,cost); } else { int cost; //到左端需要的时间 cost=dpRight[i]+s[i].h-s[j].h+s[i].x2-s[j].x1; dpLeft[j]=min(cost,dpLeft[j]); //到右端需要的时间 cost=dpRight[i]+s[i].h-s[j].h+s[j].x2-s[i].x2; dpRight[j]=min(cost,dpRight[j]); } } break; } } } } printf("%d\n",ans); } return 0; }
相关文章推荐
- 论“使用C++非内置全局变量的风险”
- WebStorm的REST client使用
- java tomcat中<context> docBase属性是什么意思?
- oracle如何杀除正在运行的进程
- 微信红包外挂?只是你不知道
- Log4j定时打印日志及添加模块名配置的Java代码实例
- 通过电机编码器AB相输出确定电机转向
- 在 Android* 商务应用中实施地图和地理围栏特性
- Dat2Rin.exe + runpkr00.exe 将*.T0* 数据转换成Rinex文件
- Java 教程
- 美团Android资源混淆保护实践
- 数据持久化
- Mac版本Android SDK无法更新问题解决
- window删除文件时提示: 源文件名长度大于系统支持的长度
- win2003安装.NET Framework 3.5报错
- Android流式布局实现
- win10开机蓝屏提示memory management怎么办?
- 关于区块链的一些思考
- idea使用gradle搭建SpringBoot
- IOS自适配利器Masonry使用指南