问题:给定由n个整数(包含负整数)组成的序列a1,a2,…,an,求该序列子段和的最大值。 当所有整数均为负值时定义其最大子段和为0。 所求的最优值为: 分析: 从问题的解的结构可以看出,它适合于用分治策略求解: 如果将所给的序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有三种情形: a[1:n]的最大子段和与a[1:n/2]的最大子段和相同; a[1:n]的最大子段和与a[n/2+1:n]的最大子段和相同; a[1:n]的最大子段和为下面的形式。
#include<iostream>
using namespace std
;
#define NUM 1001
int a
[NUM
];
int MaxSum(int n
){
int sum
=0;
int b
=0;
for (int i
=1;i
<=n
;i
++)
{
if (b
>0)
b
+=a
[i
];
else
b
=a
[i
];
if (b
>sum
) sum
=b
;
}
return sum
;
}
int main(){
}