您的位置:首页 > 其它

最大子段和算法

2010-06-02 17:25 260 查看
给定由n个整数组成的系列a1,a2,a3,...,an,求该序列的子段和的最大值。当所以整数均为负整数时定义最大子段和为0。
例如序列[-2,11,-4,13,-5,-2]的最大子段和为20.

#include <stdlib.h>
int LSS_Enumerate(const int a[],int count)
{
int i;
int j;
int iMax = a[0];
int sum[10000];
sum[0] = 0;
for(i = 1; i <= count ;i++)
{
sum[i] = sum[i-1] + a[i-1]; //sum[i]代表了序列从1到i的和
}

for(i = 0; i < count ;i++)
{
for (j = i; j < count ;j++)
{
//如果要算i到j的和,只需将sum[j]减去sum[i-1]即可
if ((sum[j+1] - sum[i]) > iMax)
{
iMax = sum[j+1] - sum[i];
}
}
}
return iMax;

}

int main(int argc, char* argv[])
{
int a[] = {-2,11,-4,13,-5,-2};
int ret = LSS_Enumerate(a,6);
printf("LSS_Enumerate = %d/n",ret);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 system