#include<iostream>
using namespace std;
int n = 10, a[10000] = { 2,-7,6,-2,8,-2,9,6,-1,-2 };
int max(int a, int b) {
if (a != b) return a > b ? a : b;
else return a;
}
//a[L]...a[r]横跨左右的最大子段和
int f(int l, int r) {
int m = (1 + r) / 2;
int sumL = 0, ansL = a[m];
int sumR = 0, ansR = a[m + 1];
for (int i = m; i > l; i--)
{
sumL += a[i];
ansL = max(ansL, sumL);
}
for (int i = m + 1; i < r; i++) {
sumR += a[i];
ansL = max(ansR, sumR);
}
return ansL + ansR;
}
int MaxSum(int l, int r)
{
if (l == r) return a[l];
else {
int m = (r + 1) / 2;
int L = MaxSum(1, m);
int R = MaxSum(m + 1, r);
int LR = f(l, r);
return max(max(L, R), LR);
}
}
int main() {
cout << MaxSum(0, 9) << endl;
return 0;
}
这是哪里出问题了?