Submission #400246

#TimeUsernameProblemLanguageResultExecution timeMemory
400246kgh3620Skyline (IZhO11_skyline)C++17
0 / 100
108 ms50116 KiB
#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <bitset> #include <cstdio> #include <limits> #include <vector> #include <cstdlib> #include <numeric> #include <sstream> #include <iostream> #include <algorithm> #include <functional> #include <iomanip> #include <unordered_map> #include <memory.h> #include <unordered_set> #include <fstream> #include <random> using namespace std; int h[301]; int dp[305][205][205]; int main(void) { cin.tie(0); ios::sync_with_stdio(false); int n; cin >> n; for (int i = 0; i < n; i++) { cin >> h[i]; } if (n == 1) { cout << 3 * h[0] << '\n'; return 0; } else if (n == 2) { int x = min(h[0], h[1]); cout << 5 * x + (h[0] - x) * 3 + (h[1] - x) * 3 << '\n'; return 0; } for (int i = 0; i <= 300; i++) { for (int j = 0; j <= 200; j++) { for (int k = 0; k <= 200; k++) { dp[i][j][k] = 1e9; } } } dp[0][0][0] = 0; for (int i = 0; i < n + 2; i++) { for (int j = 200; j>=0; j--) { for (int k = 200;k>=0;k--) { if (dp[i][j][k] >= 1e9) { continue; } if (k - 1 >= 0) { dp[i][j][k-1] = min(dp[i][j][k-1], dp[i][j][k] + 3); } if (j - 1 >= 0 && k - 1 >= 0) { dp[i][j - 1][k - 1] = min(dp[i][j - 1][k - 1], dp[i][j][k] + 5); } if (h[i] >= j && k >= j) { dp[i + 1][k - j][h[i] - j] = min(dp[i + 1][k - j][h[i] - j], dp[i][j][k] + 7 * j); } } } } cout << dp[n+2][0][0] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...