#include<iostream>
using namespace std;
int n, a, b[2], ans = -1 << 30;//n, 滚动数组,因为每次输入的a只用到一次,没必要存储, b数组用于存储前i个数组中的最子段和, 结果
int main()
{
cin >> n;
for (int i = 0; i < n; i++)//输入一个即可判断一次
{
cin >> a;
if (i == 0)//因为要以i之前的最大子段和相比,考虑到了临界第一个数没有前一个数,故第一个数进行特判
{
b[0] = a;
}
else//i%2因为可以节省数组大小,(本题也只用的两个大小空间即可),(i%2)的结果不是1,就是0
{
b[i % 2] = max(a, a + b[!(i % 2)]);//!(i%2)即可当成前i-1中的最大子段和
}
ans = max(ans, b[i % 2]);//输入一个数,就更新一下结果
}
cout << ans << endl;//输入
return 0;//好习惯
}
over~欢迎讨论