文章

134

粉丝

0

获赞

217

访问

14.7k

头像
中南 - 最大连续子序列 题解:
P1664 中南大学机试题
发布于2026年2月13日 13:09
阅读数 109

#include <bits/stdc++.h>
using namespace std;

int main() {    
    int k;
    while (cin >> k) {
        vector<int> a(k);
        for (int i = 0; i < k; i++) {
            cin >> a[i];
        }        
        // 检查是否全负数
        bool allNeg = true;
        for (int x : a) {
            if (x >= 0) {
                allNeg = false;
                break;
            }
        }       
        if (allNeg) {
            cout << "0 0 0" << endl;
            continue;
        }        
        // dp[i] = 以i结尾的最大连续子序列和
        // 用滚动变量优化
        long long curSum = a[0];   // 当前连续子序列和
        int curStart = 0;          // 当前子序列起点       
        long long maxSum = a[0];   // 全局最大和
        int maxStart = 0, maxEnd = 0;  // 全局最优的起终点        
        for (int i = 1; i < k; i++) {
            // 决策:从前面延续,还是从i重新开始
            if (curSum + a[i] >= a[i]) {
                // 延续前面的(>=保证i和j最小,相等时优先延续)
            ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发