子串和

来源:互联网 发布:次世代软件 编辑:程序博客网 时间:2024/05/22 06:18

子串和

时间限制:5000 ms  |  内存限制:65535 KB

难度:3

描述

给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最大,其中,1<=x<=y<=n

输入

第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)

输出

对于每组测试数据输出和最大的连续子串的和。

样例输入

151 2 -1 3 -2

样例输出

5

提示

输入数据很多,推荐使用scanf进行输入

程序代码:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

 

long a[1000001];

 

long MaxSum(long n,long *a)

{

  long sum=-100,b=0;

  for(int i=1;i<=n;i++)

  {

    if(b>0) b+=a[i];

    else b=a[i];

    if(b>sum) sum=b;        

  }

  return sum;    

}

 

int main()

{

  int m,i;

  long n;

  scanf("%d",&m);

  while(m--)

  {

    scanf("%ld",&n); 

    memset(a,0,sizeof(a));

    for(i=1;i<=n;i++)

      scanf("%ld",&a[i]);

    printf("%ld\n",MaxSum(n,a));                  

  } 

  system("pause");

  return 0; 

  

 

 

 

0 0
原创粉丝点击