Submission #1101432

#TimeUsernameProblemLanguageResultExecution timeMemory
1101432LOLOLOK blocks (IZhO14_blocks)C++14
0 / 100
14 ms83912 KiB
#include <bits/stdc++.h> #define int long long #define f first #define pii pair<int, int> #define s second const int N = 1e5 + 5; const int block = 450; const int oo = 99999989; const int base = 31; using namespace std; int n, a[N], dp[N][105], rmq[N][20], k; int get(int l, int r){ if(r == l) return rmq[l][0]; int k = __lg(r - l + 1); return max(dp[l][k], dp[r - (1 << k) + 1][k]); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> k; for(int i = 1;i <= n;i++) cin >> a[i], rmq[i][0] = a[i]; for(int j = 1;(1 << j) <= n;j++){ for(int i = 1; i + (1 << j) - 1 <= n;i++){ rmq[i][j] = max(rmq[i][j - 1], rmq[i + (1 << j) - 1][j - 1]); } } memset(dp, 0x4f, sizeof(dp)); dp[0][1] = 0; for(int i = 1;i <= n;i++) dp[i][1] = max(dp[i - 1][1], a[i]); for(int j = 2;j <= k;j++){ for(int i = j;i <= n;i++){ for(int h = j;h <= i;h++){ dp[i][j] = min(dp[i][j], dp[h - 1][j - 1] + get(h, i)); } } } cout << dp[n][k]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...