2 条题解

  • 0
    @ 2025-10-8 16:55:50
    #include<bits/stdc++.h>
    using namespace std;
    int a[210][210], s[210][210], f[210];
    int main()
    {
        int n;scanf("%d", &n);
        for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
        {  
            scanf("%d", &a[i][j]);
            s[i][j] = s[i][j-1] + a[i][j];
        }
        int ans = -0xffffffff;
        for(int x=1;x<=n;x++)
            for(int y=x;y<=n;y++)
            {
                f[0] = 0;
                for(int i=1;i<=n;i++)
                {
                    if(f[i-1] > 0)f[i] = (s[i][y] - s[i][x-1]) + f[i-1];
                    else        f[i] = (s[i][y] - s[i][x-1]);
                
                    ans = max(ans, f[i]);
                }
            }
        printf("%d\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:55:44
      #include<bits/stdc++.h>
      using namespace std;
      int a[210][210],s[210][210],f[210];
      int main()
      {
          int n;scanf("%d",&n);
          for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
          {  
              scanf("%d",&a[i][j]);
              s[i][j]=s[i][j-1]+a[i][j];
          }
          int ans=-0xffffffff;
          for(int x=1;x<=n;x++)
              for(int y=x;y<=n;y++)
              {
                  f[0]=0;
                  for(int i=1;i<=n;i++)
                  {
                      if(f[i-1]>0)f[i]= (s[i][y] -s[i][x-1] ) + f[i-1];
                      else        f[i]= (s[i][y] -s[i][x-1] );
                  
                      ans=max(ans,f[i]);
                  }
              }
          printf("%d\n",ans);
          return 0;
      }
      • 1

      【动态规划:区间一维一边推】最大子矩阵1️⃣

      信息

      ID
      1265
      时间
      1000ms
      内存
      64MiB
      难度
      3
      标签
      递交数
      99
      已通过
      54
      上传者