제출 #1355090

#제출 시각아이디문제언어결과실행 시간메모리
1355090AvianshDeveloper (BOI25_dev)C++20
54 / 100
2096 ms156428 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int arr[n];
    for(int &i : arr){
        cin >> i;
    }
    auto fin = [&] (int i){
        set<int>s;
        for(int j = i-5;j<=i+5;j++){
            if(j>=0&&j<n){
                s.insert(arr[j]);
                s.insert(arr[j]+1);
                s.insert(arr[j]-1);
            }
        }
        return s;
    };
    map<int,array<int,2>> dp[n];
    for(int i : fin(0)){
        dp[0][i][0]=dp[0][i][1]=abs(i-arr[0]);
    }
    for(int i = 1;i<n;i++){
        for(int h : fin(i)){
            dp[i][h][0]=1e18;
            dp[i][h][1]=1e18;
            for(int H : fin(i-1)){
                if(H<h){
                    dp[i][h][1]=min(dp[i][h][1],dp[i-1][H][0]);
                }
                else if(H>h){
                    dp[i][h][0]=min(dp[i][h][0],dp[i-1][H][1]);
                }
                else{
                    dp[i][h][0]=min(dp[i][h][0],dp[i-1][H][0]);
                    dp[i][h][1]=min(dp[i][h][1],dp[i-1][H][1]);                }
            }
            dp[i][h][0]+=abs(arr[i]-h);
            dp[i][h][1]+=abs(arr[i]-h);
        }
    }
    int ans = 1e18;
    for(int i : fin(n-1)){
        ans=min({dp[n-1][i][0],dp[n-1][i][1],ans});
    }
    cout << ans;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…