实例1.1 最大子列和问题
这个题我的第一想法就是用尺取去求。
在线算法,刚刚开始并没有看懂是啥意思。他其实就是一个聪明的尺取,他先从第一个开始加,输入一个就加一个,与之前的最大值比较更换最大值。直到和小于0了,重新开始计数,最后求出最大子序列。这种算法叫做“在线”算法,我认为内涵其实应该是尺取。
#include <stdio.h>
int maxnum(int a[ ], int N );
int main()
{
int K;
while(~scanf("%d",&K))
{
int a[100010];
for(int i=0;i<K;i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",maxnum(a,K));
}
}
int maxnum(int a[ ], int N )
{
int ThisSum, MaxSum, j;
ThisSum = MaxSum = 0;
for ( int i = 0; i < N; i++ )
{
ThisSum += a[ i ];
if ( ThisSum > MaxSum )
MaxSum = ThisSum;
else if ( ThisSum < 0 )
ThisSum = 0;
}
return MaxSum;
}