首页 > 代码库 > 南阳理工--44 子串和

南阳理工--44 子串和

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

 
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=<I<=100),表示数列中的所有元素。(0<n<=1000000)
输出
对于每组测试数据输出和最大的连续子串的和。
样例输入
1
5
1 2 -1 3 -2
样例输出
5
提示
输入数据很多,推荐使用scanf进行输入
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[1000000+10];
 5 int main()
 6 {
 7     int t,n;
 8     int maxx;
 9     scanf("%d",&t);
10     while(t--)
11     {
12         maxx=0;
13         scanf("%d",&n);
14         for(int i=0;i<n;i++)
15             scanf("%d",&a[i]);
16         int sum=0;
17         for(int i=0;i<n;i++)
18         {
19             sum+=a[i];
20             if(sum<0)
21             {
22                 sum=0;
23             }
24             maxx=max(maxx,sum);
25                 
26         } 
27         if(maxx==0)      //忽略了全负的情况
28         {
29           sort(a,a+n);
30           printf("%d\n",a[n-1]);    
31         } 
32         else 
33         printf("%d\n",maxx); 
34     }
35     return 0;
36 }

 

南阳理工--44 子串和