数组的最大子序列之和

来源:互联网 发布:优化人才管理是什么 编辑:程序博客网 时间:2024/06/06 03:39

问题描述:求最大子序列之和一直是让人困扰的问题,之所以困扰,主要是由于没有想清楚该怎样操作,下面给出一种最暴力的求解方法,利用多重循环来求解最大子序列和,每次对给定子序列求和,把它与刚开始设定的最大值进行计较,如果它大于设定的最大值,将它设置为最大值,记录最大值的初始位置和终端位置,然后输出就是最大子序列,同时,最大子序列的和也可求出来。

优点:思路简单,编程方便。

缺点:时间复杂度为O(N^3)。

具体实现:

#include<stdio.h>
int main(void)
{
int a[8]={1,-2,3,10,-4,7,2,5};
int i,j,k,sum,maxsum,start,end,m;
maxsum=a[0];
for(i=0;i<8;i++)
{
for(j=i;j<8;j++)
{
sum=0;
for(k=i;k<=j;k++)
{
sum+=a[k];
}
if(sum>maxsum)
{
start=i;
maxsum=sum;
end=j;

}
}
}
printf("输出最大子序列:");
for(m=start;m<=end;m++)
{
printf("%3d",a[m]);
}
printf("\n最大子序列之和为:%d",maxsum);

原创粉丝点击