题目链接
样例
代码
#include <stdio.h>
struct List
{
int left;
int right;
int mleft;
int mright;
};
int matrix[100000];
int findmax1(int n)
{
int i=0;
int thisum=0,maxsum=0;
for(i=0;i<n;i++)
{
thisum+=matrix[i];
if(thisum>maxsum)
{
maxsum=thisum;
}
if(thisum<0)
{
thisum=0;
}
}
return maxsum;
}
int findmax3(int l,int r)
{
int mid=l+(r-l)/2;
int maxl=0;
int maxr=0;
if(l==r)
{
return matrix[l]>=0?matrix[l]:0;
}
maxl=findmax3(l,mid);
maxr=findmax3(mid+1,r);
int midl=0;
int midlmax=0;
int midr=0;
int midrmax=0;
int maxmid=0;
int i;
for(i=mid;i>=l;i--)
{
midl+=matrix[i];
if(midl>midlmax)
{
midlmax=midl;
}
}
for(i=mid+1;i<=r;i++)
{
midr+=matrix[i];
if(midr>midrmax)
{
midrmax=midr;
}
}
maxmid=midlmax+midrmax;
int max=maxl>maxr?maxl:maxr;
max=max>maxmid?max:maxmid;
return max;
}
int findmax2(int n)
{
int thisum=0;
int maxsum=0;
int i=0;
for(i=0;i<n;i++)
{
int j=i;
for(;j<n;j++)
{
thisum+=matrix[j];
if(thisum>maxsum)
{
maxsum=thisum;
}
}
thisum=0;
}
return maxsum;
}
int main()
{
//struct List a={0,0,0,0};
int n;
int i=0;
if(scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d",&(matrix[i]));
}
}
printf("%d",findmax3(0,n-1));
}