题目
答案
#include<stdio.h>
int Max(int a,int b,int c)
{
if(a>b)
{
if(a>c) return a;
else return c;
}
else
{
if(b>c) return b;
else return c;
}
}
int apart(int a[],int left,int right)
{
int left_max,right_max;
int left_sum=0,right_sum=0;
int left_sum_max=0,right_sum_max=0;
int i,center;
if(left==right)
{
if(a[left]>0) return a[left];
else return 0;
}
center=(left+right)/2;
left_max=apart(a,left,center);
right_max=apart(a,center+1,right);
for(i=center;i>=left;i--)
{
left_sum+=a[i];
if(left_sum>left_sum_max) left_sum_max=left_sum;
}
for(i=center+1;i<=right;i++)
{
right_sum+=a[i];
if(right_sum>right_sum_max) right_sum_max=right_sum;
}
return Max(left_max,right_max,left_sum_max+right_sum_max);
}
int main()
{
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%d",apart(a,0,n-1));
}
参考
https://blog.csdn.net/qq_31672701/article/details/88787640
我对于其中的变量做了一定的修改,每个变量的多个含义之间用下划线分隔开,这样会显得代码更有层次一些