qaq想出来dp就没有然后了。。。。
n^3啊别说时间了,开都开不下。
所以优化?
单调队列优化。。
具体的呢。。只用注意 倒着推就很ok了。具体单调性加油!
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
//by mars_ch
int n;
int f[100005],g[100005],sum[100005];
int q[100005];
int h,t;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int a;
scanf("%d",&a);
sum[i]=sum[i-1]+a;
}
h=1,t=1;
q[1]=n+1;
for(int i=n;i>=1;i--)
{
while(h<t && sum[q[h+1]-1]-sum[i-1]>=f[q[h+1]])
{
++h;
} //j的范围越小越好
f[i]=sum[q[h]-1]-sum[i-1];
g[i]=g[q[h]]+1;
while(h<=t && sum[q[t]-1]-f[q[t]]<=sum[i-1]-f[i]) --t;
q[++t]=i;
}//k>j sum[k-1]-f[k]<=sum[j-1]-f[j] k决策没有j优
printf("%d\n",g[1]);
}