//要求输出最大连续字段和的第一个数和最大一个数,在DP[]中加一个数组记录开始元素就可以了
#include<iostream> #include<cstdio> using namespace std; struct node { int head,v; } dp[10010]; int arr[10010]; int head,rear; int function(int k) { int ans=-20000; dp[1].v=arr[1]; dp[1].head=arr[1]; for(int i=2; i<=k; i++) { if(dp[i-1].v>0) { dp[i].v=dp[i-1].v+arr[i]; dp[i].head=dp[i-1].head;//开始没加这个 } else { dp[i].v=arr[i]; dp[i].head=arr[i]; } } for(int i=1; i<=k; i++) { if(dp[i].v>ans) { ans=dp[i].v; head=dp[i].head; rear=arr[i]; } } return ans; } int main() { int k; while(scanf("%d",&k),k) { int sum=0; for(int i=1; i<=k; i++) { scanf("%d",&arr[i]); if(arr[i]<0) sum++; } if(sum==k) { printf("0 %d %d\n",arr[1],arr[k]); } else { int ans=function(k); printf("%d %d %d\n",ans,head,rear); } } //system("puase"); return 0; }