#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]