dp简单递推就行了,不多说了。。。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<stack>
#include<map>
#include<time.h>
int a[20000],k,i,j,symbol,max=0,b[20000],i1,max1,star,end,star1,end1;
int main()
{
while(scanf("%d",&k)&&k)
{
max=0;
symbol=0;
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
if(a[i]<0)symbol++;
}
if(symbol==k)printf("0 %d %d\n",a[0],a[k-1]);
else
{
star=a[0];end=a[0];
star1=a[0];end1=a[0];
max1=a[0];
max=0;
for(i=0;i<k;i++)
{
if(max+a[i]>a[i])
{
max=max+a[i];
end=a[i];
}
else
{
max=a[i];
star=a[i];
end=a[i];
}
if(max>max1)
{
star1=star;
end1=end;
max1=max;
}
}
printf("%d %d %d\n",max1,star1,end1);
}
}
return 0;
}