2 条题解

  • 0
    @ 2023-10-17 20:03:55

    使用状态压缩,用两个变量来代替数组,将时间复杂度从O(n2)压缩到O(n)

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int prev;
        cin >> prev;
        int res = prev;
    
        while (--n) {
            int a;
            cin >> a;
            prev = max(a, prev + a);
            res = max(prev, res);
        }
    
        cout << res << endl;
    }
    
    int max(int a, int b) {
        return a > b ? a : b;
    }
    
    • 0
      @ 2023-6-11 12:19:06

      C++ :

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          int n,s=0,b[110]={0},max=INT_MIN;
          cin>>n;
          int a[110];
          for(int i=1;i<=n;i++)
          {
              cin>>a[i];
              s=s+a[i];
              b[i]=s;
          }
          for (int i=1;i<=n;i++)
          {
              for (int j=1;j<=n-i+1;j++)
              {
                  if (b[j+i-1]-b[j-1]>max) max=b[j+i-1]-b[j-1];
              }
          }
          cout<<max<<endl;
          return 0;
      }
      
      
      • 1

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

      信息

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