http://hi.baidu.com/banyantree/blog/item/7d78b1ef3d2a1e11fdfa3c93.html
#include "stdafx.h"
#include <iostream>
using namespace std;
int FindMaxSumSubSequence(int arr[], int len, int &begin, int &end)
{
int res = 0; //存储最大和
int tempSum = 0; //当前的最大和
int tempBegin = 0; //当前的起点
int tempEnd = 0; //当前的终点
for (int i = 0; i < len; ++i)
{
tempSum = tempSum + arr[i];
if (tempSum < 0) //重新计算
{
tempSum = 0;
tempBegin = i + 1;
}
else
tempEnd = i;
if (tempSum > res) //更改最大和,以及起点和终点
{
res = tempSum;
begin = tempBegin;
end = tempEnd;
}
}
return res;
}
int main()
{
// int arr[] = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};
int arr[] = {1, -2, 3, 5};
int len =sizeof(arr) / sizeof(*arr);
int begin = 0;
int end = 0;
int res = FindMaxSumSubSequence(arr, len, begin, end);
printf("%maxSum = %d, start: %d, end: %d\n", res, arr[begin], arr[end]);
}