题意:给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大?
例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
题目链接:http://www.51nod.com/Tutorial/Chapter.html#chapterId=2
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
typedef long long ll;
using namespace std;
ll a[50005];
int main()
{
int n;
ll A = 0;
int cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]<0) cnt++;
}
if(cnt==n){
cout<<0<<endl;
return 0;
}
ll endmax = a[1];
ll ans = a[1];
for(int i=2;i<=n;i++)
{
endmax = max(endmax,A)+a[i];
ans = max(ans,endmax);
}
cout<<ans<<endl;
return 0;
}