理解:在开始的时候不知道全部的输入,实时的根据每加入的一个数据改变给出的结果,“在线”
相对而言,离线算法就是一开始记录所有的输入,一次性给出结果
同样是最大子序列问题:
和前面那个动态规划算法的思路有部分类似:
从前往后一次累加,如果是负数,则归零,并记录在该过程中的最大值。
原因:遇到负数-让后面的部分变小了
写的有一点乱,题目PAT A1007,第4个测试点还是没过,等我找到原因了再来。
#include <stdio.h>
#define MAX 10010
int array[MAX];
int tempfirst;
int max,first,last;
int main(){
int num;
int flag=0;
int sum=0;
max=-1;
tempfirst=1;
first=1;
scanf("%d",&num);
for(int i=0;i<num;i++){
scanf("%d",&array[i]);
sum+=array[i];
if(sum<0){
sum=0;
flag=1;
continue;
}if(flag){
tempfirst=array[i];
flag=0;
}
if(sum>max){
first=tempfirst;
max=sum;
last=array[i];
}
}
if(max<0){
printf("0 %d %d",array[0],array[num-1]);
}else{
printf("%d %d %d",max,first,last);
}
return 0;
}