洛谷P1115

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;
}
posted @ 2025-05-09 12:39  Chuan81  阅读(12)  评论(0)    收藏  举报