//经典DP //b[i] = max{b[i-1] + a[i],a[i]} //用n^2的暴力会超时。 //注意保存子段首尾的位置 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int a[10001]; int b[10001]; int K; bool flag; int st,en; int main() { while(scanf("%d",&K) != EOF) { if(K == 0) break; flag = true; int MAX = 0; int besti = 0; int bestj = 0; st = 0,en = 0; for(int i = 1; i <= K; i++) { scanf("%d",&a[i]); if(a[i] >= 0) flag = false; } memset(b,0,sizeof(b)); for(int i = 1; i <= K; i++) { if(b[i-1] > 0) { b[i] = b[i - 1] + a[i]; en = i; } else { b[i] = a[i]; st = i; en = i; } if(b[i] > MAX) { MAX = b[i]; besti = st; bestj = en; } } if(flag) cout<<"0 "<<a[1]<<" "<<a[K]<<endl; else cout<<MAX<<" "<<a[besti]<<" "<<a[bestj]<<endl; } return 0; }