NYOJ 子串和 44

来源:互联网 发布:java开发平台搭建 编辑:程序博客网 时间:2024/05/23 02:01

子串和

时间限制: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<stdlib.h>#define N 1000010int d[N];int main(){int t;scanf("%d",&t);while(t--){int n,i,max=0,sum=0,num=-200;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&d[i]);if(d[i]>num)num=d[i];}        if(num<0)  //如果序列最大值是负的,那么只需输出这个负的最大值就可以了。        {        printf("%d\n",num);        continue;}for(i=0;i<n;i++){sum+=d[i];if(sum>max){max=sum;}else if(sum<0){sum=0;}}printf("%d\n",max);}return 0;}        


0 0