目录
一、题目
设A=<a1,a2,...,an>是n个整数的序列,称<ai,....,aj>为该序列的连续子序列,其中1<=i<=j<=n,子序列的元素之和称为A的子段和:
例如,A=<-2,11,-4,13,-5,-2>,那么它的子段和如下:
长度为1的子段和有:-2,11,-4,13,-5,-2
长度为2的子段和有:9,7,9,8,-7
长度为3的子段和有:5,20,4,6
长度为4的子段和有:18,15,2
长度为5的子段和有:13,13
长度为6的子段和有:11
其中的最大子段和为:11-4+13=20
则最大子段和问题为:
给定n个整数的序列A=<a1,a2,...,an>,求
二、算法求解
1、蛮力算法
通过枚举A的所有连续子序列并且求和,通过比较找出具有最大和的子序列。
伪代码
//算法 Enumerate
//输入:数组A[1..n]
//输出:sum,first,last //sum为最大子段和,first与last分别是和的首末位置
算法分析
3个for循环,每次执行O(n)次,循环内部是常数操作,所以该算法的时间复杂度为
程序
//算法3.8 Enumerate
//输入:数组A[1..n]
//输出:sum,first,last
#include<stdio.h>
#include<stdlib.h>
void Enumerate (int a[],int n)
{
int