题意就是给你一些数,将这些数划分成n个区间,使得后一个区间里数字的和大于等于前一个区间里数字的和,求n最大;
#include<bits/stdc++.h>
#include<string.h>
#include<string>
#include<cstring>
#include<stdio.h>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define mod 1000000007
int dp[3005];//最大区间数
ll sum[3005];//前缀和
ll ism[30005];//第i个区间最大的值
int main()
{
int n;
while(cin>>n)
{
memset(dp,0,sizeof(dp));
memset(sum,0,sizeof(sum));
memset(ism,0,sizeof(ism));
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
sum[i]=sum[i-1]+a;
}
for(int i=1;i<=n;i++)
{
for(int j=i-1;j>=0;j--)
{
if(sum[i]-sum[j]>=ism[j])//i到j区间的数字之和大于等于到第j个数字为止的最后一个区间的和;
{
dp[i]=dp[j]+1;
ism[i]=sum[i]-sum[j];
break;
}
}
}
cout<<dp[n]<<endl;
}
return 0;
}