01-複雜度1 最大子列和問題 (20分)分治
阿新 • • 發佈:2019-01-23
#include<bits/stdc++.h>
using namespace std;
int n,a[100000+5];
int maxsum(int x,int y)
{
int m,L,R,v,i,maxs;
if(y-x==1) return a[x];
m=x+(y-x)/2;
maxs=max(maxsum(x,m),maxsum(m,y));
L=a[m-1];
v=0;
for(i=m-1;i>=x;i--)
L=max(L,v+=a[i]);
R=a[m];
v=0;
for (i=m;i<y;i++)
R=max(R,v+=a[i]);
return max(maxs,L+R);
}
int main()
{
int i;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%d\n",maxsum(0,n));
}
return 0;
}