注意:
输出的是最大子序列头尾指针所指向的值而不是指针本身
#include<stdio.h>
#define MAX 10001
int max(int a,int b){
return a>b?a:b;
}
int main(){
int n;
while(~scanf("%d",&n)){
int qs[n];
for(int i=0;i<n;i++){
scanf("%d",&qs[i]);
}
int dp[n];
int first = 0,end = 0;
int ans = qs[0];
dp[0] = qs[0];
for(int i=1;i<n;i++){
dp[i] = max(dp[i-1]+qs[i],qs[i]);
if(dp[i]>ans){
ans = dp[i];
end = i;//更新尾指针
}
}
first = end;
while(dp[first]!=qs[first]){
first--;//向前更新头指针
}
if(ans<0){
printf("%d %d %d",0,qs[0],qs[n-1]);
}else{
printf("%d %d %d",ans,qs[first],qs[end]);
}
}
}