2 条题解

  • 0
    @ 2024-11-28 15:50:40

    方法二:

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[105][105];
    int ans;
    int mx = -1e9;
    int main() {
        cin >> n;
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= n; j++) {
                cin >> a[i][j];
                //取所有数字最大值,防止矩阵都是负数的情况
                mx = max(mx, a[i][j]);
                a[i][j] += a[i][j - 1]; //求前缀和,方便计算一段元素的和
            }
        }
        for(int i = 0; i < n; i++) {//枚举子矩阵起始列
            for(int j = i + 1; j <= n; j++) {//枚举子矩阵终止列
                int sum = 0;//和
                for(int k = 1; k <= n; k++) {//枚举行
                    sum += a[k][j] - a[k][i];//加入第k行的和
                    if (sum < 0) sum = 0;//贪心,如果没有贡献,清零
                    ans = max(ans, sum);//求最大值
                }
            }
        }
        if (ans == 0) {//如果最大值为0,有可能全部元素都小于0,结果是空矩阵
            cout << mx;//输出矩阵元素最大值
        } else {//否则,输出答案
            cout << ans;
        }
        return 0;
    }
    
    
    • 0
      @ 2024-11-28 15:31:46
      #include <bits/stdc++.h>
      using namespace std;
      #define N 1001
      using namespace std;
      int a[N][N],f[N];
      int maxArray(int t[],int n)
      {
          int sum=0,maxx=INT_MIN;
          for(int i=1;i<=n;i++)
          {
              if(sum>0)
                  sum+=t[i];
              else
                  sum=t[i];
              if(sum>maxx)
                  maxx=sum;
          }
          return maxx;
      }
      int main()
      {
          int n;
          cin>>n;
          for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                  cin>>a[i][j];
       
          int maxx=INT_MIN;
          for(int i=1;i<=n;i++)
          {
              memset(f,0,sizeof(f));
              for(int j=i;j<=n;j++)
              {
                  for(int k=1;k<=n;k++)
                      f[k]+=a[j][k];
       
                  int temp=maxArray(f,n);
                  if(temp>maxx)
                      maxx=temp;
              }
          }
       
          cout<<maxx<<endl;
          return 0;
      }
      
      • 1

      信息

      ID
      760
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      12
      已通过
      5
      上传者