#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 time | Memory | Grader output |
|---|
| Fetching results... |