#include <bits/stdc++.h>
using namespace std;
#define MAXN 501
int n,a[MAXN];
long long pref[MAXN];
int maksi[2][MAXN][MAXN];
int32_t main()
{
ios_base::sync_with_stdio(false);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
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++) maksi[0][i][j]=maksi[1][i][j]=0;
}
for (int i=1;i<=n;i++) maksi[0][1][i]=maksi[1][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[0][l][x-1]==0) continue;
maksi[1][x][r]=max(maksi[1][x][r],maksi[0][l][x-1]+1);
}
}
for (int l=r;l>=1;l--) maksi[0][l][r]=maksi[1][l][r];
}
int answer=0;
for (int l=n;l>=1;l--) answer=max(answer,maksi[0][l][n]);
cout<<answer<<endl;return 0;
}
return 0;
}