洛谷P1115
考察Kadane算法
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
int ans = 0, sum = -10009;//sum值用于记录连续字段和,ans记录最大连续字段和
vector<int> a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
}
for(int i = 0; i < n; i++) {
sum = max(sum + a[i], a[i]);//如果sum赋值a[i],代表上一个sum值为负数,从a[i]开始记录新子段
//这里的原理是当一个数字前紧邻的连续子段为负数时,字段剔除前N个数都会其值减小,也就是说该连续字段并不包括更大的连续子段和
ans = max(ans, sum);//记录连续子段和最大值
}
cout << ans;
}

浙公网安备 33010602011771号