方法:运用动态规划,状态方程:sum[i]=max(seq[i],seq[i]+sum[i-1])
注意点:均为负数的情况
#include <iostream>
int seq[10010]={0};
int sum[10010]={0};
int main(){
int num;
scanf("%d",&num);
for(int i=0;i<num;i++){
scanf("%d",&seq[i]);
}
sum[0]=seq[0];
int max=seq[0],len=1,maxpos=0;
int prelen=1,nowlen=1;
for(int i=1;i<num;i++){
if(seq[i]>seq[i]+sum[i-1]){
sum[i]=seq[i];
nowlen=1;
if(sum[i]>max){
len=1;
max=sum[i];
maxpos=i;
}
}else{
sum[i]=seq[i]+sum[i-1];
nowlen=prelen+1;
if(sum[i]>max){
len=nowlen;
maxpos=i-len+1;
max=sum[i];
}
}
prelen=nowlen;
}
if(max<0){
printf("0 %d %d",seq[0],seq[num-1]);
}else{
printf("%d %d %d",max,seq[maxpos],seq[maxpos+len-1]);
}
return 0;
}