采用动态规划和分治。
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
/*
double maxadd(double *shu,int from,int to)
{
if(to==from)
return shu[to];
int middle=(from+to)/2;
double m1=maxadd(shu,from,middle);
double m2=maxadd(shu,middle+1,to);
int i;
int left=shu[middle],now=shu[middle];
for(i=middle-1;i>=from;i--)
{
now+=shu[i];
left=max(now,left);
}
int right=shu[middle+1];
now=right;
for(i=middle+2;i<=to;i++)
{
now+=shu[i];
right=max(now,right);
}
double m3=left+right;
return max(m1,m2,m3);
}*/ //max函数自己写吧
int main()
{
int a[9]={-1,1,2,4,-7,9,3,-4,-2};
int sum=a[0];
int max=a[0];
for(int i=1;i<9;i++)
{
if((sum+a[i])>a[i])//sum>0
sum=sum+a[i];
else
sum=a[i];
if(sum>max)
max=sum;
}
printf("max sum is:%d\n",max);
}