#include <bits/stdc++.h>
using namespace std;
#define MAXN 505
#define int long long
int n,a[MAXN],pref[MAXN];
int dp[MAXN][MAXN][MAXN];
int maksi[MAXN][MAXN];
int32_t main()
{
cin>>n;for (int i=1;i<=n;i++) cin>>a[i];
pref[0]=0;for (int i=1;i<=n;i++) pref[i]=pref[i-1]+a[i];
if (n<=20)
{
int answer=0;
for (int maska=0;maska<(1<<n);maska++)
{
vector<int> positions;positions.push_back(0);
for (int bit=0;bit<n;bit++)
{
if (maska&(1<<bit)) positions.push_back(bit+1);
}
if (positions[(int)positions.size()-1]!=n) continue;
vector<int> values;
for (int i=1;i<(int)positions.size();i++) values.push_back(pref[positions[i]]-pref[positions[i-1]]);
bool valid=true;
for (int i=1;i<(int)values.size();i++)
{
if (values[i]<values[i-1]) {valid=false;break;}
}
if (valid) answer=max(answer,(int)values.size());
}
cout<<answer<<endl;
return 0;
}
if (n<=500)
{
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
for (int k=1;k<=n;k++) dp[i][j][k]=-LLONG_MAX;
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++) maksi[i][j]=-LLONG_MAX;
}
for (int i=1;i<=n;i++) maksi[1][i]=1;
for (int r=1;r<=n;r++)
{
for (int l=r-1;l>=1;l--)
{
for (int x=l+1;x<=r;x++)
{
if (pref[x-1]-pref[l-1]>pref[r]-pref[x-1]) continue;
if (maksi[l][x-1]==-LLONG_MAX) continue;
dp[l][x][r]=maksi[l][x-1]+1;
}
}
for (int l=r-1;l>=1;l--)
{
for (int x=l+1;x<=r;x++) maksi[x][r]=max(maksi[x][r],dp[l][x][r]);
}
}
int answer=0;
for (int l=n;l>=1;l--) answer=max(answer,maksi[l][n]);
cout<<answer<<endl;return 0;
}
return 0;
}