Submission #753103

#TimeUsernameProblemLanguageResultExecution timeMemory
753103OlympiaK blocks (IZhO14_blocks)C++17
0 / 100
1 ms212 KiB
#include <vector> #include <iostream> #include <cassert> #include <cmath> #include <map> #include <set> using namespace std; vector<int64_t> p; int main () { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, K; cin >> N >> K; int64_t arr[N]; for (int i = 0; i < N; i++) { cin >> arr[i]; } int64_t INF = 1e17; vector<int64_t> cur(N + 1); p.assign(N + 1, INF), cur.assign(N + 1, INF); for (int j = 1; j <= N; j++) { p[j] = ((j == 1) ? arr[0] : max(p[j - 1], arr[j - 1])); } for (int i = 2; i <= K; i++) { vector<int64_t> val; val.assign(N + 1, INF); for (int j = 1; j <= N; j++) { if (j == 1) { cur[j] = INF; int64_t myMax = 0; for (int l = j - 1; l >= 0; l--) { myMax = max(myMax, arr[l]); cur[j] = min(cur[j], p[l] + myMax); val[l] = p[l] + myMax; } } else { cur[j] = INF; int64_t myMax = arr[j - 1]; for (int l = j - 1; l >= 0; l--) { myMax = max(myMax, arr[l]); if (myMax == arr[j - 1]) { val[l] = p[l] + arr[j - 1]; cur[j] = min(cur[j], p[l] + arr[j - 1]); } else { cur[j] = min(cur[j], p[l] + arr[j - 1]); } } } } swap(cur, p); } cout << p[N]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...