zoukankan      html  css  js  c++  java
  • 273. 分级

    273. 分级

    dp i j 表示第i个位置填第B[j]时的最小代价

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<math.h>
    
    using namespace std;
    #define int long long
    #define si signed
    #define sc(x) scanf("%lld",&x);
    #define maxn 3009
    #define abs llabs
    int A[maxn];
    vector<int> v;
    int B[maxn];
    int dp[maxn][maxn];
    int n;
    si main()
    {
        sc(n);
        for(int i=1;i<=n;i++){
            sc(A[i]);
            v.push_back(A[i]);
        }
        sort(v.begin(),v.end());
        int sz=unique(v.begin(),v.end())-v.begin();
        for(int i=0;i<sz;i++){
            B[i]=v[i];
        }
        for(int i=1;i<=n;i++){
            int val=1e18;
            for(int j=0;j<sz;j++){
                val=min(val,dp[i-1][j]);
                dp[i][j]=val+abs(A[i]-B[j]);
            }
        }
        int ans=1e18;
        for(int i=0;i<sz;i++){
            ans=min(ans,dp[n][i]);
        }
        for(int i=1;i<=n;i++){
            int val=1e18;
            for(int j=sz-1;j>=0;j--){
                val=min(val,dp[i-1][j]);
                dp[i][j]=val+abs(A[i]-B[j]);
            }
        }
        for(int i=0;i<sz;i++){
            ans=min(ans,dp[n][i]);
        }
        cout<<ans<<'
    ';
    
    }
  • 相关阅读:
    两数之和
    dict用法
    xgboost
    常见报错
    四、ABP 学习系列
    Apache Htpasswd生成和验证密码
    ABP 学习系列
    Gradle 配置
    ArcGis教程
    在线排程设置生成器Quartz
  • 原文地址:https://www.cnblogs.com/liulex/p/11631234.html
Copyright © 2011-2022 走看看