Submission #501426

#TimeUsernameProblemLanguageResultExecution timeMemory
501426MazaalaiBigger segments (IZhO19_segments)C++17
13 / 100
3 ms4300 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using VI = vector <int>; using VLL = vector <ll>; int n, m; const int N = 3e3 + 5; const ll INF = 1e17; ll ans = 1; ll nums[N], dp[N][N]; signed main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> nums[i]; for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) dp[i][j] = INF; dp[0][0] = 0; for (int i = 1; i <= n; i++) { ll curSum = 0; for (int l = 0, r = 1; r <= n;) { if (dp[i-1][l] == INF) { l++, r++; continue; } curSum += nums[r++]; while ((dp[i-1][l] > curSum || curSum == 0) && r <= n) curSum += nums[r++]; if (curSum >= dp[i-1][l]) dp[i][r-1] = curSum; // cout << i << ' ' << l << ' ' << r << ' ' << curSum << '\n'; // i = n+1; // break; while (l + 1 < r && dp[i-1][l+1] <= curSum-nums[l+1]) { curSum -= nums[++l]; dp[i][r-1] = curSum; } // cout << i << ' ' << l << ' ' << r << '\n'; // exit(0); } if (dp[i][n] != INF) ans = max(ans, (ll)i); } // for (int i = 1; i <= n; i++) // for (int j = 1; j <= n; j++) cout << (dp[i][j] == INF ? -1 : dp[i][j]) << " \n"[j==n]; cout << ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...