Description
给定由n整数(可能为负数)组成的序列 {a1,a2,…,an},求该序列形如ai+ai+1,…,+aj的子段和的最大值。当所有的整数均为负数时定义其最大子段和为0。
Input
输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有2*C行数据,每组测试数据占2行,每组测试数据第一行是1个整数n,表示有n个整数,接下来一行有n个整数,它们之间用空格隔开.
Output
你的输出应该有C行,即每组测试数据的输出占一行,它是计算出的最大子段和.
Sample Input
1
6
-2 11 -4 13 -5 -2
Sample Output
20
#include <stdio.h>
int maxsum(int n,int *a)
{
int sum=0,b=0,i,j;
for(i=1;i<=n;i++)
{
if(b>0) b+=a[i];
else b=a[i];
if(b>sum) sum=b;
}
return sum;
}
main()
{
int m;
scanf("%d",&m);
while(m--)
{
int a[100],i,max,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
max=maxsum(n,a);
printf("%d\n",max);
}
}