第一次在51Nod上做题。
通过对一道题的不断修改,压缩时间,是一道题最终AC,来逐步完善自己的思维。
1049 最大子段和
简述题目:
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。
例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
源代码:
#include <iostream>
#define N 50010
using namespace std;
long long int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
long long int max=0;
for(int i=1;i<n;i++)
{
long long int sum=0; //由于a[i]最大可以为10^9,需定义long long int
if(a[i]<0) i++; //从a[i]大于0的数开始,减少循环时间,防止超时
for(int j=i;j<=n;j++)
{
sum+=a[j];
if(sum>max) max=sum;
}
}
cout<<max<<endl;
return 0;
}