POJ 1661
来源:互联网 发布:三星note8画画软件 编辑:程序博客网 时间:2024/06/11 13:59
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1010;int t,n,s1,s2,maxs;typedef struct name{ int x1,x2,h;}jimmy;jimmy a[maxn];int dp[maxn][2];const int INF=9999999;bool cmp(jimmy a,jimmy b){ if(a.h<b.h) return true; return false;}int leftmin(int i){ int k=i-1; while(k>0&&a[i].h-a[k].h<=maxs) { if(a[i].x1>=a[k].x1&&a[i].x1<=a[k].x2) { dp[i][0]=a[i].h-a[k].h+min(a[i].x1-a[k].x1+dp[k][0],a[k].x2-a[i].x1+dp[k][1]); return 0; } else k--; } if(a[i].h-a[k].h>maxs) dp[i][0]=INF; else dp[i][0]=a[i].h;}int rightmin(int i){ int k=i-1; while(k>0&&a[i].h-a[k].h<=maxs) { if(a[i].x2>=a[k].x1&&a[i].x2<=a[k].x2) { dp[i][1]=a[i].h-a[k].h+min(a[i].x2-a[k].x1+dp[k][0],a[k].x2-a[i].x2+dp[k][1]); return 0; } else k--; } if(a[i].h-a[k].h>maxs) dp[i][1]=INF; else dp[i][1]=a[i].h;}int shorttime(){ int i; for(int i=1;i<=n+1;i++) { leftmin(i); rightmin(i); } return min(dp[n+1][0],dp[n+1][1]);}int main(){ scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&n,&s1,&s2,&maxs); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { scanf("%d%d%d",&a[i].x1,&a[i].x2,&a[i].h); } a[0].x1=-20000; a[0].x2=20000; a[0].h=0; a[n+1].x1=s1; a[n+1].x2=s1; a[n+1].h=s2; sort(a,a+n+2,cmp); /*for(int i=0;i<=n+1;i++) printf("%d %d %d\n",a[i].x1,a[i].x2,a[i].h);*/ printf("%d\n",shorttime()); } return 0;}
这个题目还是一个记忆化搜索,对现在的我来说还是感觉比较难啊,虽然一开始想到了应该是这种问题,但是如何设立dp数组没有想到能那么精妙,这就是也个难点了啊,
让人很是苦恼的啊,然后难点就是循环i:1-n+1然后求解每层的i的对向左还是向右走的选择的算的的dp的值了。这些也需要一定的技巧特别是对底层的处理。然后看别人的
解题报告还是能学到不少的,我是从这个博客里学的 http://blog.csdn.net/jdplus/article/details/19919531 然后就是学习了一哈那个qsort的用法,网上学习资料
很多,随便找了一篇这个的,http://blog.csdn.net/ncs12/article/details/24139189 发现这个qsort的用法和sort的用法还是有很多不一样的,那个当 > < = 三者的
情况下的对排序结果的处理都是不同的,这点倒是qsort的好处啊。
0 0
- POJ 1661
- POJ 1661
- poj 1661
- poj 1661
- 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 DP
- poj 1661:帮助 Jimmy
- poj 1661 动态规划
- POJ 1661 Help Jimmy
- POJ 1661 DP
- Android - View的绘制流程二(layout)
- 【Raspberry Pi 3试用体验】+ 中文显示及输入+百度云传输
- 康托展开入门
- JDBC01
- Java遍历容器注意问题
- POJ 1661
- Android stadio
- 单用户进入SQLServer并修改行版本控制级别
- iOS基础:NSDate
- BestCoder-Machine(三进制-彩灯变换)
- OpenCV完美配置攻略
- Shell中创建序列和数组(list、array)的方法
- 归并排序
- 关于TCP的问题总结