题库练习 2021年CSP-S提高组初赛阅读程序题: #include <algorithm>

A61581 | 2021年CSP-S提高组初赛阅读程序题: #include <algorithm>

来源2021年
时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

2021年CSP-S提高组初赛阅读程序题:

 #include <algorithm>
 #include <iostream>
 using namespace std;
 
 int n, a[1005]; 
 
 struct Node 
 {  
    int h, j, m, w; 
 
    Node(const int _h, const int  j, const int  m, const int _w):
        h(_h), j(_j), m(_m), w( w)
    { } 
 
    Node operator+(const Node &o) const
    {
        return Node(
            max(h, w + o.h),
            max(max(j, 0.j),m + o.h),
            max(m + o.w, o.m),
            w + o.w);
    }
 }
 
 Node solve1(int h, int m)
 {
     if (h > m)
         return Node(-1, -1, -1, -1);
     if (h == m)
         return Node(max(a[h], 0), max(a[h], 0), max(a[h], 0), a[h]);
     int j = (h + m) >> 1;
     return solve1(h,j) + solve1(j + 1, m);
 }
 
 int solve2(int h, int m)
 {
     if (h > m)
         return -1;
     if (h == m)
         return max(a[h], 0);
     int j = (h + m) >> 1;
     int wh = 0, wm = 0;
     int wht = 0, wmt = 0;
     for (int i = j; i >= h; i--) {
         wht += a[i];
         wh = max(wh, wht);
     }
     for (int i = j + 1; i <= m; i++) {
         wmt += a[i];
         wm = max(wm, wmt);
     }
     return max(max(solve2(h, j), solve2(j + 1, m)), wh + wm);
 } 
 
 int main()
 { 
     cin >> n;
     for (int i = 1; i <= n; i++) cin >> a[i];
     cout << solve1(1, n).j <<endl;
     cout << solve2(1, n) << endl;
     return 0;
 }

假设输入的所有数的绝对值都不超过 1000,完成下面的判断题和单选题:

C++ 编辑器
输入
输出