日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 1661 Help Jimmy

發布時間:2025/4/9 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1661 Help Jimmy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門:http://poj.org/problem?id=1661

解題思路:其實吧,不難就是細節有點麻煩。

實現代碼:

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;const int MAXN=20005; const int INF=1<<30;struct Node{int lx,rx,h;bool operator <(const Node &rhs) const{return h<rhs.h;} }line[MAXN];int dp[MAXN][2];int main(){int T;scanf("%d",&T);while(T--){int N,X,Y,MAX;scanf("%d%d%d%d",&N,&X,&Y,&MAX);line[0].lx=X;line[0].rx=X;line[0].h=Y;for(int i=1;i<=N;i++)scanf("%d%d%d",&line[i].lx,&line[i].rx,&line[i].h);sort(line,line+N+1);dp[0][0]=line[0].h;dp[0][1]=line[0].h;for(int i=1;i<=N;i++){//計算第i個板子往左的時間int j=i-1;while(j>=0&&(line[i].lx>line[j].rx||line[i].lx<line[j].lx))j--;if(j==-1){if(line[i].h>MAX)dp[i][0]=INF;elsedp[i][0]=line[i].h;}else{if(line[i].h-line[j].h>MAX){dp[i][0]=INF;}else{int rt=INF,lt=INF;if(dp[j][0]!=INF&&line[i].h-line[j].h<=MAX)lt=dp[j][0]+line[i].lx-line[j].lx+line[i].h-line[j].h;if(dp[j][1]!=INF&&line[i].h-line[j].h<=MAX)rt=dp[j][1]+line[j].rx-line[i].lx+line[i].h-line[j].h;dp[i][0]=min(lt,rt);}}//計算往右走的時間j=i-1;while(j>=0&&(line[i].rx>line[j].rx||line[i].rx<line[j].lx))j--;if(j==-1){if(line[i].h>MAX)dp[i][1]=INF;elsedp[i][1]=line[i].h;}else{if(line[i].h-line[j].h>MAX)dp[i][1]=INF;else{int rt=INF,lt=INF;if(dp[j][0]!=INF&&line[i].h-line[j].h<=MAX)lt=dp[j][0]+line[i].rx-line[j].lx+line[i].h-line[j].h;if(dp[j][1]!=INF)rt=dp[j][1]+line[j].rx-line[i].rx+line[i].h-line[j].h;dp[i][1]=min(rt,lt);}}}printf("%d\n",min(dp[N][1],dp[N][0]));} }

?

轉載于:https://www.cnblogs.com/IKnowYou0/p/6628337.html

總結

以上是生活随笔為你收集整理的POJ 1661 Help Jimmy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。