zoukankan      html  css  js  c++  java
  • 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;
                    else
                        dp[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;
                    else
                        dp[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
    ",min(dp[N][1],dp[N][0]));
        }
    }
    自己选的路,跪着也要把它走完------ACM坑
  • 相关阅读:
    AWS Redshift 采坑记
    EF Core 小工具
    Setup .net core EF
    Bat 使用MSBuild 制作发布包 (更新20180713)
    Https web Api 拉取数据踩坑记录
    C# 后台程序 通过批处理进行监控
    C#计算日期步进
    IIS 预热 (8.0及8.0以上版本)
    MSBuild 执行文档,关于使用命令行编译
    基于Bamboo的CI配置汇总(.Net Web及Api)
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6628337.html
Copyright © 2011-2022 走看看