Submission #336881

#TimeUsernameProblemLanguageResultExecution timeMemory
336881boykutBigger segments (IZhO19_segments)C++14
27 / 100
105 ms1516 KiB
#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector < int > a(n); for (int & to : a) { cin >> to; } vector < int64_t > prefsum(n); for (int i = 0; i < n; i++) { prefsum[i] = a[i]; if (i) prefsum[i] += prefsum[i - 1]; } auto get = [&] (int left, int right) -> int64_t { return prefsum[right] - (left == 0 ? 0ll : prefsum[left - 1]); }; /*if (n <= 500) { set < pair < int64_t, int > > dp[n]; for (int i = 0; i < n; i++) { dp[i].insert(make_pair(get(0, i), 1)); } for (int i = 0; i < n; i++) { for (int j = 1; j <= i; j++) { int mx = -1; for (auto it : dp[j - 1]) { if (it.first <= get(j, i)) { if (mx == -1 || it.second > mx) mx = it.second; } } if (mx == -1) continue; dp[i].insert(make_pair(get(j, i), mx + 1)); } } int mx = 0; for (auto it : dp[n - 1]) { if (it.second > mx) mx = it.second; } cout << mx << '\n'; return 0; }*/ if (n <= 600) { vector < vector < bool > > can(n, vector < bool > (n, false)); vector < vector < int > > dp(n, vector < int > (n, 0)); for (int i = 0; i < n; i++) { can[0][i] = true; dp[0][i] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { for (int k = 0; k <= j - 1; k++) { if (get(k, j - 1) <= get(j, i) && can[k][j - 1]) { dp[j][i] = max(dp[j][i], dp[k][j - 1] + 1); can[j][i] = true; } } } } int mx = 0; for (int i = 0; i < n; i++) { mx = max(mx, dp[i][n - 1]); } cout << mx << '\n'; return 0; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...