解题思路:
因为数值比较大,所以时间复杂度不能是 o(n^2);
用几个值分别记录变量即可。比较简单。
程序:
#include<stdio.h>
#include<string.h>
#define N 100005
int a[N];
int main()
{
int max,sum,n,m,i,j,b,c;
while(scanf("%d",&n),n)
{
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=sum=a[0];
m=b=c=a[0];
for(i=1;i<n;i++)
{
if(sum+a[i]<a[i])
{
sum=a[i];
b=a[i]; //b还可能变化
}
else
{
sum+=a[i];
}
if(max<sum)
{
max=sum;
m=b; //只有在这里m才可能是最终的。
c=a[i];
}
}
if(max<0)
printf("0 %d %d\n",a[0],a[n-1]);
else
printf("%d %d %d\n",max,m,c);
}
return 0;
}