基本概念
题目:求最大子列和问题:
给定K个整数组成的序列{ N1, N2, …, Nk},“连续子列”被定义为{ Nii , Ni+1i+1 , …, Njj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
算法一:暴力求子列
/*
目的->求最大子列和:
时间复杂度:O(N^3)
时间: 0.058 s
*/
#include<stdio.h>
int MaxSubseqSum1(int A[ ], int N)
{
int ThisSum, MaxSum = 0;
int i, j, k;
for (i=0; i<N; i++) //i为子列的左端位置
{
for (j=i; j<N; j++) //j为子列的右端位置
{
ThisSum = 0; //ThisSum是A[i]到A[j]的子列和
//k的循环没有必要,有很多重复计算
for (k=i; k<=j; k++) //实现从A[i]到A[j]的累加
ThisSum += A[k];
if (ThisSum > MaxSum) //如果新的子列和更大
MaxSum = ThisSum; //则更新结果
}
}
return MaxSum;
}
int main(void)
{
int a[6] = {
-2, 11, -4, 13, -5, -2};
int MaxSum;
MaxSum =