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]); }