最大子串和

Description

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。

Input

输入有多组数据。每组数据第一行输入一个整数n(n<=10^6),第二行输入n个整数。n=0时程序结束。

Output

每组数据输出一个答案。

Sample Input

1
2
3
6	
-2 11 -4 13 -5 -2
0

Sample Output

1
20

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
int main()
{
int n;
while((scanf("%d",&n)!=EOF))
{
if(n==0) break;
//
int a[n];
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
int max=a[0];
int sum;
for(int i=0;i<n;++i)//开始
{
for(int j=i;j<n;++j)//结束
{
sum=0;
for(int k=i;k<=j;++k)//求子段和
{
sum+=a[k];
}
if(sum>max)
max=sum;
}
}
printf("%d\n",max);
}
}
凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条