#include<bits/stdc++.h>
using namespace std;
const int N=5005;
int n,a[N],sum[N],dp[N][N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i),sum[i]=sum[i-1]+a[i];
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][1]=sum[i];
for(int j=2;j<=n;j++)
{
int x=1;
while(x<=n and dp[x][j-1]==0x3f3f3f3f) x++;
for(int i=j;i<=n;i++)
{
while(x<=n and dp[x][j-1]+sum[x]<=sum[i]) x++;
if(x<=i and dp[x-1][j-1]!=0x3f3f3f3f) dp[i][j]=sum[i]-sum[x-1];
}
}
for(int i=n;i>=1;i--)
{
if(dp[n][i]!=0x3f3f3f3f)
{
cout<<n-i;
return 0;
}
}
return 0;
}
这是代码,错的那个点输出答案比正确答案多了1