2 条题解

  • 0
    @ 2025-11-13 16:04:15
    • 由于求的是最大乘积,而且有负数
    • 所以需要同时维护 乘积最大值,乘积最小值
    • 由于每个状态只与上一个状态相关(之前的状态已经没用),可以把数组省掉,只开 22 个变量
    #include <bits/stdc++.h>
    using namespace std;
    
    int maxProduct(vector<int>& a) {
        int n = a.size();
        
        // ma(i): 以 a(i) 结尾的最大子数组乘积
        // mi(i): 以 a(i) 结尾的最小子数组乘积
        int ma = a[0], mi = a[0], ans = a[0];
    
        for (int i = 1; i < n; i++) {
            int x = a[i] * ma;
            int y = a[i] * mi;
            ma = max(a[i], max(x, y));
            mi = min(a[i], min(x, y));
            ans = max(ans, ma);
        }
        return ans;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0); cout.tie(0);
    
        int n;
        cin >> n;
        vector<int> a(n);
        for (int i = 0; i < n; i++) cin >> a[i];
        cout << maxProduct(a) << '\n';
    
        return 0;
    }
    
    • 0
      @ 2025-11-13 16:02:51
      • 由于求的是最大乘积,而且有负数
      • 所以需要同时维护 乘积最大值,乘积最小值
      #include <bits/stdc++.h>
      using namespace std;
      
      int maxProduct(const vector<int>& a) {
          int n = a.size();
      
          // ma(i): 以 a(i) 结尾的最大子数组乘积
          // mi(i): 以 a(i) 结尾的最小子数组乘积
          vector<int> ma(n), mi(n);
          
          int ans = 0;
          ma[0] = a[0], mi[0] = a[0];
          for (int i = 1; i < n; i++) {
              int x = a[i] * ma[i - 1];
              int y = a[i] * mi[i - 1];
              ma[i] = max(a[i], max(x, y));
              mi[i] = min(a[i], min(x, y));
              ans = max(ans, ma[i]);
          }
          return *max_element(ma.begin(), ma.end());
      }
      
      int main() {
          ios::sync_with_stdio(false);
          cin.tie(0); cout.tie(0);
      
          int n;
          cin >> n;
          vector<int> a(n);
          for (int i = 0; i < n; i++) cin >> a[i];
          cout << maxProduct(a) << '\n';
      
          return 0;
      }
      
      • 1

      信息

      ID
      174
      时间
      100ms
      内存
      32MiB
      难度
      3
      标签
      递交数
      63
      已通过
      35
      上传者