#include <bits/stdc++.h>
using namespace std;
int a[1000100];
int main()
{
int n; cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
int t = *max_element(a, a + n);
if(t <= 0) return t;
int cnt = 0, ans = -999;
for(int i = 0; i < n; i++)
{
int x = a[i];
if(cnt + x < 0) ans = max(ans, cnt), cnt = 0;
else cnt += x;
ans = max(ans, cnt);
}
ans = max(ans, cnt);
cout << ans << endl;
}
以上是re代码;
#include <bits/stdc++.h>
using namespace std;
int a[200005], n;
void get(int a[])
{
int t = *max_element(a, a + n);
if(t <= 0) {cout << t << endl; return;}
int cnt = 0, ans = -999;
for(int i = 0; i < n; i++)
{
int x = a[i];
if(cnt + x < 0) ans = max(ans, cnt), cnt = 0;
else cnt += x;
ans = max(ans, cnt);
}
ans = max(ans, cnt);
cout << ans << endl;
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
get(a);
}
以上是ac代码; 求大佬解释原理(委屈)