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<<'
    ';
    
    }
  • 相关阅读:
    Qt ini文件
    Qt我的文档 桌面路径
    windows zlib库编译步骤
    环形缓冲区
    openssl生成随机数
    怎样安装Scrapy
    CentOS7怎样安装GoAccess1.3
    Docker创建数据卷容器
    Docker创建数据卷
    Docker创建容器
  • 原文地址:https://www.cnblogs.com/liulex/p/11631234.html
Copyright © 2011-2022 走看看