分治思想
include
<stdio.h>
int
Max(
int A,
int B,
int C) {
int D = A > B ? A : B;
return C > D ? C : D;
}
//分治
int
DIVERGE_AND_CONQUER(
int list[],
int left,
int right)
{
int maxleftsum,maxrightsum;
int maxleftbordersum,maxrightbordersum;
int center,i;
//递归终止条件
if(right==left)
{
if(left>=
0)
return list[left];
else
return
0;}
//分
center=(left+right)/
2;
maxleftsum=
DIVERGE_AND_CONQUER(list,left,center);
maxrightsum=
DIVERGE_AND_CONQUER(list,center,right);
//治
int leftbordersum=
0;
maxleftbordersum=
0;
for(i=center;i>=left;i--)
{
leftbordersum+=list[i];
if(leftbordersum>maxleftbordersum)
maxleftbordersum=leftbordersum;
}
int rightbordersum=
0;
maxrightbordersum=
0;
for(i=center;i<=right;i++)
{
rightbordersum+=list[i];
if(rightbordersum>maxrightbordersum)
maxrightbordersum=rightbordersum;
}
return
Max(maxleftbordersum+maxrightbordersum,maxleftsum,maxrightsum);
}
int
main() {
int i=
0,a[
1000];
char c;
while(c!=
'\0')
{
scanf(
"%c",&c);
a[i]=c-
'0';
i++;
}
return
DIVERGE_AND_CONQUER(a,
0,i-
1);
}