【连接】nbu1490点击打开链接
【题目】
连续最大和
Time Limit:5000MS Memory Limit:65536K
Description
给你一串数字,求一个最大的连续部分,使得这部分和最大,取的部分长度至少为1
Input
首先一个t表示有t组数据.然后是t组数据.
每组首先包含一个n,表示有n个数字,然后是这n个数字(n<=1000000),数字不超过1000000
Output
一个数字,最大的部分和
Sample Input
1
5
-1 1 9 -2 3
Sample Output
11
【思路】
从头到尾加和,若是发现当前元素比前面的和大,那就重新开始加过。
【代码】
1
#include<stdio.h>
#include<algorithm>
#include<string>
using namespace std;
int a[1000001];
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
a[i]=a[i]>(a[i]+a[i-1])?a[i]:(a[i]+a[i-1]);
sort(a,a+n);
printf("%d\n",a[n-1]);
}
return 0;
}
2
#include<cstdio>
int a[1000001];
int main()
{
int t,n,i,max;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<n;i++)
{
a[i]=a[i]>(a[i]+a[i-1])?a[i]:(a[i]+a[i-1]);
if(a[i]>max) max=a[i];
}
printf("%d\n",max);
}
return 0;
}