제출 #1322491

#제출 시각아이디문제언어결과실행 시간메모리
1322491aaaaaaaa스카이라인 (IZhO11_skyline)C++20
0 / 100
46 ms100676 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 2e18; const int mxN = 305; int dp[mxN][205][205], a[mxN]; signed main(){ ios::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); int n; cin >> n; for(int i = 1; i <= n; ++i){ cin >> a[i]; } for(int i = 0; i < mxN; ++i){ for(int j = 0; j < 205; ++j){ for(int k = 0; k < 205; ++k){ dp[i][j][k] = 0x3f; } } } if(n == 1){ cout << a[1] * 3 << "\n"; }else if(n == 2){ cout << min(a[1], a[2]) * 5 + abs(a[1] - a[2]) * 5 << "\n"; }else{ for(int i = 0; i <= a[1]; ++i){ dp[1][0][a[i] - i] = dp[2][a[1] - i][a[2]] = i * 3; } for(int i = 2; i <= n; ++i){ for(int prev = a[i - 1]; prev >= 0; --prev){ for(int cur = a[i]; cur >= 0; --cur){ dp[i][prev][cur] = min(dp[i][prev][cur], dp[i][prev][cur + 1] + 3); } } for(int prev = a[i - 1]; prev >= 0; --prev){ for(int cur = a[i]; cur >= 0; --cur){ dp[i][prev][cur] = min(dp[i][prev][cur], dp[i][prev + 1][cur + 1] + 5); } } if(i == n) break; for(int j = min({a[i - 1], a[i], a[i + 1]}); j >= 0; --j){ for(int cur = a[i]; cur >= j; --cur){ dp[i + 1][cur - j][a[i + 1] - j] = min(dp[i + 1][cur - j][a[i + 1] - j], dp[i][j][cur] + 7ll * j); } } } cout << dp[n][0][0] << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...