#10758. 数组第二题(NOIP2014最大子矩阵和)

数组第二题(NOIP2014最大子矩阵和)

第二题(NOIP2014最大子矩阵和)

给出m行n列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。输入第一行包含两个整数m和n,即矩阵的行数和列数。之后m行,每行n个整数,描述整个矩阵。程序最终输出最大的子矩阵和。

#include<iostream>
using namespace std;
const int SIZE=100;
int matrix[SIZE+1][SIZE+1];
int rowsum[SIZE+1][SIZE+1]; //rowsum[i][j]记录第i行前j个数的和
int m,n,i,j,first,last,area,ans;

int main() {
    cin>>m>>n;
    for (i=1;i<=m;i++)
        for (j=1;j<=n;j++)
            cin>>matrix[i][j];
    ans=matrix[  ①  ];
    for (i=1;i<=m;i++)
        ②  ;
    for (i=1;i<=m;i++)
        for (j=1;j<=n;j++)
            rowsum[i][j]=  ③  ;
    for (first=1;first<=n;first++)
        for (last=first;last<=n;last++) {
            ④  ;
            for (i=1;i<=m;i++) {
                area+=  ⑤  ;
                if (area>ans) ans=area;
                if (area<0) area=0;
            }
        }
    cout<<ans<<endl;
    return 0;
}

●选择题 (1)①处应填( )。 {{ select(1) }}

  • [0][0]
  • [0][n]
  • [n][0]
  • [1][1]

(2)②处应填( )。 {{ select(2) }}

  • rowsum[i][0]=matrix[i][1]
  • rowsum[i][0]=1
  • rowsum[i][0]=0
  • rowsum[i][0]=ans

(3)③处应填( )。 {{ select(3) }}

  • rowsum[i][j-1]
  • rowsum[i-1][j]+matrix[i][j]
  • matrix[i][j]
  • rowsum[i][j-1]+matrix[i][j]

(4)④处应填( )。 {{ select(4) }}

  • area=0
  • ans=area
  • area=ans
  • ans=0

(5)⑤处应填( )。 {{ select(5) }}

  • matrix[i][last]
  • rowsum[i][last]-rowsum[i][first-1]
  • matrix[i][first]
  • rowsum[i][last]-rowsum[i][first]