zoukankan      html  css  js  c++  java
  • URAL 2072 Kirill the Gardener 3

    URAL 2072

    思路:

    dp+离散化

    由于湿度的范围很大,所以将湿度离散化

    可以证明,先到一种湿度的最左端或者最右端,然后结束于最右端或最左端最优,因为如果结束于中间,肯定有重复走的路

    状态:dp[i][0]表示湿度为i结束于左端最优的步数

       dp[i][1]表示湿度为i结束于右端最优的步数

    初始状态:dp[0][0]=dp[0][1]=0

    状态转移:

            dp[i][0]=min(dp[i][0],dp[i-1][0]+abs(prel-nowr)+abs(nowl-nowr));
            dp[i][0]=min(dp[i][0],dp[i-1][1]+abs(prer-nowr)+abs(nowl-nowr));
            dp[i][1]=min(dp[i][1],dp[i-1][0]+abs(prel-nowl)+abs(nowl-nowr));
            dp[i][1]=min(dp[i][1],dp[i-1][1]+abs(prer-nowl)+abs(nowl-nowr));

    prel和prer表示上一种湿度的最左端和最右端

    nowl和nowr表示当前湿度的最左端和最右端

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int N=1e5+5;
    const ll INF=0x3f3f3f3f3f3f3f3f;
    int a[N];
    ll dp[N][2];
    vector<int>pos[N];
    vector<int>sz;
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i],sz.pb(a[i]);
        sort(sz.begin(),sz.end());
        sz.erase(unique(sz.begin(),sz.end()),sz.end());
        for(int i=1;i<=n;i++){
            int t=lower_bound(sz.begin(),sz.end(),a[i])-sz.begin()+1;
            pos[t].pb(i);
        }
        mem(dp,INF);
        dp[0][0]=dp[0][1]=0;
        int prel=1,prer=1;
        for(int i=1;i<=sz.size();i++){
            int nowl=pos[i][0],nowr=pos[i][pos[i].size()-1];
            dp[i][0]=min(dp[i][0],dp[i-1][0]+abs(prel-nowr)+abs(nowl-nowr));
            dp[i][0]=min(dp[i][0],dp[i-1][1]+abs(prer-nowr)+abs(nowl-nowr));
            dp[i][1]=min(dp[i][1],dp[i-1][0]+abs(prel-nowl)+abs(nowl-nowr));
            dp[i][1]=min(dp[i][1],dp[i-1][1]+abs(prer-nowl)+abs(nowl-nowr));
            prel=nowl,prer=nowr;
        }
        cout<<min(dp[sz.size()][1],dp[sz.size()][0])+n<<endl;
        return 0;
    }
  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/widsom/p/8371614.html
Copyright © 2011-2022 走看看