最大字段和,常规解法有四种,分别是:
1、三重for循环;
2、两重for循环;
3、分治解法;
4、动态规划;
从时间复杂度的角度讲,动态规划是最优算法,故对其简单介绍:
#include<iostream>
using namespace std;
int maxIntervalSum(int n,int a[]) //动态规划求最大子段和,O(n)
{
int max=a[0];
int f[100];
for(int i=1;i<n;i++)
{
if(f[i-1]>0)
{
f[i]=f[i-1]+a[i];
}
else
{
f[i]=a[i];
}
if(f[i]>max)
{
max=f[i];
}
}
return max;
}
int main()
{
int a[]={1,-3,5,-1,-2,-1,9,-6,4};
cout<<maxIntervalSum(sizeof(a)/sizeof(int),a)<<endl;
return 0;
}