int MaxLeft,MaxRight;
int MaxSubseqsum3 (int A[],int N)
{
int ThisSum=0,MaxSum=0;
int SumLeft=0,SumRight;
int i;
for(i=0;i<N;i++)
{
SumRight=i; //当前子列和右端
ThisSum += A[i]; //向右累加
if(ThisSum>MaxSum)
{
MaxSum=ThisSum; //发现更大和则更新当前结果
MaxLeft=SumLeft;//最大子列和左端
MaxRight=SumRight;//最大子列和右端
}
else if(ThisSum < 0)//如果当前子列和为负
{
ThisSum = 0; //则不可能使后面的部分和增大,抛弃之
SumLeft=i+1; //当前子列和左端
}
}
return MaxSum;
}
可以求出最大子序列
int maxsub(const int a[],int n)
{
int sum, max, i, j, begin, end;
begin = end = max = 0;
for(i = 0;i < n;i++)
{
sum = 0;
for(j = i;j<n;j++)
{
sum += a[j];
printf("the second level loop %d loop sum = %d\n",j,sum);
printf("the second level loop %d loop max = %d\n",j,max);
if(sum > max)
{
max = sum;
begin = i;
end = j;
}
}
printf("the %d loop max = %d\n",i+1,max);
}
printf("--final-- Begin = %d, End = %d\n",begin,end);