注意:
1.数组的循环输入要取地址!!!!!
for(int i=0;i<K;i++)
{
scanf("%d",&a[i]); //要取地址
}
2.ThisSum的累加方法:ThisSum+=a[i];
3.理解在线处理法的实质:抛弃负子列,且保证最大子列和递增。
与之对应的两个判断条件思考的是两个不同的方向。
if(ThisSum<=0) //当前子列和为负,抛弃
{
ThisSum=0;
}
else if(ThisSum>MaxSum) //保证最大子列和MaxSum递增
{
MaxSum=ThisSum;
}
//在线处理法
#include <stdio.h>
int a[111111];
int MaxSubseqSum(int *a,int K);
int MaxSubseqSum(int *a,int K)
{
int i;
int ThisSum,MaxSum;
ThisSum=MaxSum=0;
for (i=0;i<K;i++)
{
ThisSum+=a[i];
if(ThisSum<=0)
{
ThisSum=0;
}
else if(ThisSum>MaxSum)
{
MaxSum=ThisSum;
}
}
return MaxSum;
}
int main()
{
int K;
scanf("%d",&K);
for(int i=0;i<K;i++)
{
scanf("%d",&a[i]); //要取地址
}
int i=MaxSubseqSum(a,K);
printf("%d",i);
return 0;
}