c_cpp 对于给定序列a1,a2,a3 ...... an,寻找它的某个连续子段,使得其和最大。如(-2,11,-4,13,-5,-2)最大子段是{ 11,-4,13}其和为20.下述算法的时间复杂

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 对于给定序列a1,a2,a3 ...... an,寻找它的某个连续子段,使得其和最大。如(-2,11,-4,13,-5,-2)最大子段是{ 11,-4,13}其和为20.下述算法的时间复杂相关的知识,希望对你有一定的参考价值。

//3d4-1 最大子段和问题的动态规划算法
#include "stdafx.h"
#include <iostream> 
using namespace std; 
 
int MaxSum(int n,int *a);
 
int main()
{
	int a[] = {-2,11,-4,13,-5,-2};
 
	for(int i=0; i<6; i++)
	{
		cout<<a[i]<<" ";
	}
 
	cout<<endl;
	cout<<"数组a的最大连续子段和为:"<<MaxSum(6,a)<<endl;
 
	return 0;
}
 
int MaxSum(int n,int *a)
{
	int sum=0,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;
}

以上是关于c_cpp 对于给定序列a1,a2,a3 ...... an,寻找它的某个连续子段,使得其和最大。如(-2,11,-4,13,-5,-2)最大子段是{ 11,-4,13}其和为20.下述算法的时间复杂的主要内容,如果未能解决你的问题,请参考以下文章

第四次作业

判断子序列

矩阵链乘问题

判断子序列

秦九韶方法

第四次作业