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;
    }
  • 相关阅读:
    C# a标签请求下载文件
    jquery datatable无数据提示不居中显示
    visual studio使用dos命令在生成项目时复制文件到指定目录
    技嘉,u盘安装win7,提示“找不到驱动器设备驱动程序”
    MQTT + apache-apollo服务器初学使用
    svn的基本使用方法
    linux之用户密码破解的操作
    mysql的部署
    nginx服务器
    部署
  • 原文地址:https://www.cnblogs.com/widsom/p/8371614.html
Copyright © 2011-2022 走看看