제출 #501447

#제출 시각아이디문제언어결과실행 시간메모리
501447MazaalaiBigger segments (IZhO19_segments)C++17
13 / 100
2 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 = 1e18; 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; ll sum = 0; for (int i = 1; i <= n; i++) { sum += nums[i]; dp[1][i] = sum; } for (int i = 1; i < n; i++) { ll curSum = 0; int l = 1; while (l+1 <= n && dp[i][l]==INF) l++; for (int r = l+1; r <= n; r++) { curSum += nums[r]; if (curSum >= dp[i][l]) dp[i+1][r] = min(dp[i+1][r], curSum); while (dp[i][l+1] <= curSum - nums[l+1]) { curSum -= nums[++l]; dp[i+1][r] = min(dp[i+1][r], curSum); } } if (dp[i+1][n] != INF) ans = i+1; } // 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...