s 表示以 i-1 这个数为结尾的最大连续子序列的和。
ans表示以 i 这个数为结尾的最大连续子序列的和。
当s≤0,s+w[i]不会变大,因此舍弃前面的子序列和,s置零
否则s加上当前数w[i]
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int w[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>w[i];
int ans=-0x3f3f3f3f,s=0;
for(int i=1;i<=n;i++)
{
if(s<0)s=0;
s+=w[i];
ans=max(ans,s);
}
cout<<ans;
return 0;
}