POJ 1661 Help Jimmy DP
生活随笔
收集整理的這篇文章主要介紹了
POJ 1661 Help Jimmy DP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目思路:狀態轉移方程很好推出,值得注意的是要分別判斷是否能從一個平臺的某側移動到另一平臺,也就是說要判斷過一個平臺的左端點或右端點做垂線,看這條垂線是否經過其他平臺。
?
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<iostream> #include<algorithm> #define INF 0x3FFFFFFF #define MAXSIZE 1005using namespace std;struct node {int x1,x2,h; }a[MAXSIZE];struct node1 {int lt,rt; }dp[MAXSIZE];int cmp(struct node A,struct node B) {return A.h > B.h; }int Check(int A,int B,int op) //OP=0 判斷左側是否聯通,op=1判斷右側是否聯通 {if(!op){for(int i=A+1;i<B;i++){if(a[A].x1>=a[i].x1 && a[A].x1<=a[i].x2)return 0;}if(a[A].x1>=a[B].x1 && a[A].x1<=a[B].x2)return 1;}else{for(int i=A+1;i<B;i++){if(a[A].x2>=a[i].x1 && a[A].x2<=a[i].x2)return 0;}if(a[A].x2>=a[B].x1 && a[A].x2<=a[B].x2)return 1;} }int main() {int maxn,T,n,X,Y;scanf("%d",&T);while(T--){scanf("%d%d%d%d",&n,&X,&Y,&maxn);for(int i=1;i<=n;i++)scanf("%d%d%d",&a[i].x1,&a[i].x2,&a[i].h);n++;a[n].x1=-20000;a[n].x2=20000;a[n].h=0;a[0].x1=X;a[0].x2=X;a[0].h=Y;sort(a,a+(n+1),cmp);dp[0].lt=dp[0].rt=0;for(int i=1;i<=n;i++)dp[i].lt=dp[i].rt=INF;for(int i=0;i<=n;i++){for(int j=0;j<i;j++){if(i==n && a[j].h-a[i].h<=maxn && a[j].h-a[i].h>0){if(a[j].x1>=a[i].x1 && a[j].x1<=a[i].x2 && Check(j,i,0)) //可從左點下落 {dp[i].lt=min(dp[i].lt,dp[j].lt+a[j].h-a[i].h);dp[i].rt=min(dp[i].rt,dp[j].lt+a[j].h-a[i].h);}if(a[j].x2>=a[i].x1 && a[j].x2<=a[i].x2 && Check(j,i,1)) //可以從右點下落 {dp[i].rt=min(dp[i].rt,dp[j].rt+a[j].h-a[i].h);dp[i].lt=min(dp[i].lt,dp[j].rt+a[j].h-a[i].h);}}else if(a[j].h-a[i].h<=maxn && a[j].h-a[i].h>0){if(a[j].x1>=a[i].x1 && a[j].x1<=a[i].x2 && Check(j,i,0)) //可從左點下落 {dp[i].lt=min(dp[i].lt,dp[j].lt+a[j].x1-a[i].x1+a[j].h-a[i].h);dp[i].rt=min(dp[i].rt,dp[j].lt+a[i].x2-a[j].x1+a[j].h-a[i].h);}if(a[j].x2>=a[i].x1 && a[j].x2<=a[i].x2 && Check(j,i,1)) //可以從右點下落 {dp[i].rt=min(dp[i].rt,dp[j].rt+a[i].x2-a[j].x2+a[j].h-a[i].h);dp[i].lt=min(dp[i].lt,dp[j].rt+a[j].x2-a[i].x1+a[j].h-a[i].h);}}}}int ans=min(dp[n].lt,dp[n].rt);printf("%d\n",ans);}return 0; } View Code?
轉載于:https://www.cnblogs.com/alan-W/p/6395262.html
總結
以上是生活随笔為你收集整理的POJ 1661 Help Jimmy DP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: My97DatePicker日历插件
- 下一篇: 高斯消元整数版和浮点数版实现