1 条题解

  • 1
    @ 2026-3-29 15:16:19
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        // 1. 输入数组长度 n
        int n;
        cin >> n;
    
        // 2. 定义普通数组(动态大小,C++支持变长数组)
        int nums[n];
    
        // 3. 循环输入 n 个数字,存入数组
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
    
        // 4. 定义两个变量,用于动态规划求解最大子数组和
        // cur:以当前元素结尾的最大子数组和
        // res:全局最大子数组和
        // 必须用第一个元素初始化,因为数组至少有一个元素
        int cur = nums[0];
        int res = nums[0];
    
        // 5. 从第二个元素开始遍历数组(下标从 1 开始)
        for (int i = 1; i < n; i++) {
            // 核心公式:
            // 要么把当前数加入前面的子数组
            // 要么从当前数重新开始
            cur = max(cur + nums[i], nums[i]);
    
            // 更新全局最大值
            res = max(res, cur);
        }
    
        // 6. 输出最终结果
        cout << res << endl;
    
        return 0;
    }
      
    
    
    • 1

    【基础】最大部分和(连续部分和)

    信息

    ID
    1082
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    10
    已通过
    10
    上传者