제출 #1357493

#제출 시각아이디문제언어결과실행 시간메모리
1357493lkjlkajfaDeveloper (BOI25_dev)C++20
0 / 100
4 ms5444 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long

const ll INF = 1e18;
ll a[2005];
ll dp[2005][2005];
ll n;
vector<ll> val;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        val.push_back(a[i]);
    }

    sort(val.begin(),val.end());
    val.erase(unique(val.begin(),val.end()),val.end());

    int m = val.size();

    ll ans = INF;

    // CASE 1: không giảm
    for(int j=0;j<m;j++){
        dp[1][j] = abs(a[1] - val[j]);
    }

    for(int i=2;i<=n;i++){
        ll best = INF;
        for(int j=0;j<m;j++){
            best = min(best, dp[i-1][j]);
            dp[i][j] = best + abs(a[i] - val[j]);
        }
    }

    for(int j=0;j<m;j++) ans = min(ans, dp[n][j]);

    // reset dp
    for(int i=1;i<=n;i++)
        for(int j=0;j<m;j++)
            dp[i][j]=0;

    // CASE 2: không tăng
    for(int j=0;j<m;j++){
        dp[1][j] = abs(a[1] - val[j]);
    }

    for(int i=2;i<=n;i++){
        ll best = INF;
        for(int j=m-1;j>=0;j--){
            best = min(best, dp[i-1][j]);
            dp[i][j] = best + abs(a[i] - val[j]);
        }
    }
    for(int j=0;j<m;j++) ans = min(ans, dp[n][j]);

    cout<<ans;

    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…