经过大量枚举样例可以发现。。。如果 a[1…i]=a[j…n] ,那么在最优解里 a[i] 和 a[i+1] 是不会合并到一起的, a[j] 和 a[j-1] 也不会。
于是从两端开始做一个类似归并排序的过程就行了。
#include<bits/stdc++.h>
using namespace std;
int l,r,ans,n;
long long a[1000010];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
l=1,r=n;
while(l<r)
{
if(a[l]==a[r])
l++,r--;
if(a[l]<a[r])
ans++,a[++l]+=a[l-1];
if(a[l]>a[r])
ans++,a[--r]+=a[r+1];
}
cout<<ans;
return 0;
}