题目描述
【问题】
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],
求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。
当所给的整均为负数时定义子段和为0,
依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,当(a1,a2,a3,a4,a4,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为20。
【输入】
第一行 n
第二行n个数为系列数值
【输出】
最大子段和、
【样例输入】
5
4 -5 3 2 4
【样例输出】
9
【样例输入】
7
1 2 3 -5 0 7 8
【样例输出】
16
code:
#include<bits/stdc++.h>
using namespace std;
int N,a,dp,ans=-99999999;//ans可能是负数,所以要注意一下
int main()
{
cin>>N;。
for(int i=1; i<=N; i++)
{
cin>>a;
dp=max(a,a+dp);
ans=max(ans,dp);
}
cout<<ans<<endl;
return 0;
}
最开始的时候在oj上提交,ans初始化为0,可能是因为oj上数据太少了就碰巧通过了吧,后来在其他平台提交就发现了问题,最大字段和可能是负数,所以在定义ans时要给它初始化成为一个很大很大的负数。