解析
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/74232c1a070ce78dd6d431fc1f4478d3.png)
代码
#include <stdio.h>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
int sum1(int A[], int begin, int end) {
if (begin == end)//如果只有一个数,直接放回
return A[begin];
int mas=max(sum1(A, begin, begin + (end - begin) / 2),sum1(A, begin + (end - begin) / 2 + 1, end));//求左边区间和右边
int v = 0, L = begin + (end - begin) / 2 + 1; //区间的最大值
for (int i = begin + (end - begin) / 2 + 1; i <= end; i++)L = max(L,v+=A[i]);
v = 0;
int R = A[begin + (end - begin) / 2];
for (int i = begin + (end - begin) / 2;i>=begin ; i--)R = max(R, v += A[i]);//单独求起点在左边,终点在右边的情况
return L + R;
}
int main(void) {
int a[10] = { 1,-5,8,5,1,4,-5,-8,15,84 };
cout << sum1(a, 0, 9);
system("pause");
}