#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll dp[3003][3003], a[3002], pre[3002];
vector < ll > V[3003];
ll Sum(ll x, ll y) {
return pre[y] - pre[x - 1];
}
int main() {
ll n, m, s, sum,sum1, r, x, y, i, j, ans, t, cnt;
cin >> n;
pre[0] = 0;
for (i = 1; i <= n; i ++) {
cin >> a[i];
pre[i] = pre[i - 1] + a[i];
}
vector < ll > v, q;
v.push_back(pre[1]* 2);
q.push_back(pre[1]);
V[0].push_back(pre[1]);
for (i = 2; i <= n; i ++) {
if ( v.back() <= pre[i]) {
r = v.size() - 1;
sum1 = pre[i] - q.back();
// cout << i << " " << sum1 << endl;
ans = 0;
for ( j = 0; j < V[r].size(); j ++) {
if ( V[r][j] <= (sum1 - V[r][j])) ans = j;
}
q.push_back(pre[i]);
v.push_back(pre[i] + (sum1 - V[r][ans]));
V[r + 1].push_back(sum1 - V[r][ans]);
}
else {
r = upper_bound(v.begin(), v.end(), pre[i]) - v.begin();
r --;
s = pre[i] - q[r];
V[r].push_back(s);
}
}
cout << v.size()<< endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |