[问题] 给定由n个整数(可能有负正数)组成的序列,最大子段和问题(sum of largest sub-segment problem)例如,序列(-20,11,-4,13,-5,2)的最大子段和为20
运行结果
完整代码
#include <iostream>
using namespace std;
int MaxSum(int a[],int left,int right)
{
int sum=0,midsum=0,leftsum=0,rightsum=0;
int center,s1,s2,lefts,rights;
int i,j;
if(left==right)
{
sum=a[left];
}
else{
center=(left+right)/2;
leftsum=MaxSum(a,left,center);
rightsum=MaxSum(a,center+1,right);
s1=0;lefts=0;
for(int i=center;i>=left;i--)
{
lefts+=a[i];
if(lefts>s1){
s1=lefts;
}
}
s2=0;rights=0;
for(int j=center+1;j<=right;j++)
{
rights+=a[j];
if(rights>s2){
s2=rights;
}
}
midsum=s1+s2;
if(midsum<leftsum)
{
sum=leftsum;
}
else{
sum=midsum;
}
if(sum<rightsum)
{
sum=rightsum;
}
}
return sum;
}
int main() {
int arr[] = { -20,11,-4,13,-5,-2 };
int n = sizeof(arr) / sizeof(arr[0]);
int maxSum = MaxSum(arr, 0, n - 1);
cout << "最大字段和: " << maxSum << endl;
return 0;
}