思路
第一个数为一个有效序列。
如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。
如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列。
题解:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=200005;
int a[N],n,t,ans=-0x3f3f3f3f;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&t);
if(i<2)a[i]=t;
else a[i]=max(t,t+a[i-1]);
ans=max(ans,a[i]);
}
printf("%d",ans);
return 0;
}