问题
给定整数: A1,A2,…,An,求∑jk=iAk 的最大值(为方便起见,假设全部的整数均为负数,则最大子序列和为0)
比如
对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到A4
分析
这个问题之所以有意思。是由于存在非常多求解它的算法。
解法一:穷举遍历
老老实实的穷举出全部的可能,代码例如以下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29//计算并返回所最大子序列的和:穷举遍历
int maxSubSum1(const vector & a)
{
//用来存储最大子序列的和
int maxSum = 0;
//i标记子序列的头
for (int i = 0; i < a.size(); i++)
{
//j标记子序列的尾
for (int j = i; j < a.size(); j++)
{