#include<stdio.h>
int DC(int left, int right, int *num)
{
//已经分到了最小
if (left==right)
{
return num[left];
}
//分 治
int mid = (right+left)/2;
int left_sum = DC(left, mid, num);
int right_sum = DC(mid+1, right, num);
//判断跨越边界向两边的大小
int ssum = 0;
int left_mid_sum = 0;
for(int i = mid; i>=left; i--)
{
ssum += num[i];
if (ssum>=left_mid_sum)
{
left_mid_sum = ssum;
}
}
ssum = 0;
int right_mid_sum = 0;
for(int i = mid+1; i<=right; i++)
{
ssum += num[i];
if (ssum>=right_mid_sum)
{
right_mid_sum = ssum;
}
}
//合
int sum = left_mid_sum+right_mid_sum;
if(left_sum>sum) sum = left_sum;
if(right_sum>sum) sum = right_sum;
return sum;
}
int main()
{
int count = 0;
while(!scanf("%d", &count));
int num[count];
for (int i = 0; i < count; i++)
while(!scanf("%d",&num[i]));
printf("%d",DC(0,count-1,num));
return 0;
}
05-17
2142

03-10
2466
