Submission #639654

#TimeUsernameProblemLanguageResultExecution timeMemory
639654luanaamorimK blocks (IZhO14_blocks)C++14
0 / 100
15 ms32212 KiB
#include <iostream> #include <queue> #include <string> #include <algorithm> #include <vector> #include <cmath> #include <iomanip> #include <map> #include <cstring> #include <set> #include <stack> #include <bitset> #define MAX (int) 2e3 #define ll long long #define INF (ll) 1e9 #define dbug(x) cout << #x << ' ' << x << endl using namespace std; ll n, m, arr[MAX], memo[MAX][MAX], maior[MAX][MAX], l, r, resp; pair<ll, ll> dp[MAX][101]; ll f(int i, int k) { if (k < 0) return INF; if (i > n) return (k?INF:0); if (~memo[i][k]) return memo[i][k]; ll resp = INF; for (int j = i; j <= n; j++) resp = min(resp, f(j+1, k-1) + maior[i][j]); return memo[i][k] = resp; } void dct(int i, int j, int l, int r, int k) { if (i > j) return; int mid = (i+j)>>1; dp[mid][k] = {INF, r+1}; for (int idx = mid; idx <= r; idx++) dp[mid][k] = min(dp[mid][k], {dp[idx+1][k-1].first + maior[mid][idx], -idx}); int optmid = -dp[mid][k].second; dct(i, mid-1, optmid, r, k); dct(mid+1, j, l, optmid, k); } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> arr[i]; // arr[i]%=1000000; // cout << arr[i] << ' '; } // cout << endl; for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) maior[i][j] = max(arr[j], maior[i][j-1]); for (int i = 0; i <= n+1; i++) for (int j = 0; j <= m; j++) dp[i][j] = {INF, -1}; dp[n+1][0] = {0, 0}; // for (int i = n; i >= 1; i--) // { // for (int k = 1; k <= m; k++) // { // dp[i][k] = {INF, i}; // for (int j = n; j >= i; j--) // dp[i][k] = min(dp[i][k], {dp[j+1][k-1].first + maior[i][j], j}); // } // } memset(memo, -1, sizeof memo); // f(1, m); for (int i = 1; i <= m; i++) { dct(1, n, 1, n, i); if (dp[1][i].first != f(1, i)) cout <<i << endl; // for (int j = 1; j <= n; j++) // { // if (memo[j][i] == -1) memo[j][i] = INF; // if (memo[j][i] != dp[j][i].first) // { // dbug(dp[j][i].first); // // dbug(i); // } // } // cout << endl; } cout << dp[1][m].first << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...