Mua‘@远

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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);

   }

}

posted on 2013-05-15 23:42  Mua‘@远  阅读(160)  评论(0编辑  收藏  举报