제출 #1355110

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

using namespace std;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    int arr[n];
    for(int &i : arr){
        cin >> i;
    }
    vector<int>mem[n];
    auto fin = [&] (int i){
        mem[i].reserve(27);
        for(int j = i-4;j<=i+4;j++){
            if(j>=0&&j<n){
                mem[i].push_back(arr[j]);
                mem[i].push_back(arr[j]+1);
                mem[i].push_back(arr[j]-1);
            }
        }
    };
    unordered_map<int,array<long long,2>> dp[n];
    fin(0);
    for(int i : mem[0]){
        dp[0][i][0]=dp[0][i][1]=abs(i-arr[0]);
    }
    for(int i = 1;i<n;i++){
        fin(i);
        for(int h : mem[i]){
            dp[i][h][0]=1e18;
            dp[i][h][1]=1e18;;
            for(int H : mem[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);
        }
    }
    long long ans = 1e18;
    for(int i : mem[n-1]){
        ans=min({dp[n-1][i][0],dp[n-1][i][1],ans});
    }
    cout << ans;
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…