码迷,mamicode.com
首页 > 其他好文 > 详细

URAL 2072 Kirill the Gardener 3

时间:2018-01-28 17:21:08      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:离散化   c++   ril   eof   https   turn   memset   div   lan   

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;
}

 

URAL 2072 Kirill the Gardener 3

标签:离散化   c++   ril   eof   https   turn   memset   div   lan   

原文地址:https://www.cnblogs.com/widsom/p/8371614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!