//找出矩阵中由 1 组成的最大的矩形,
#include "stdafx.h"
#include "iostream"
using namespace std;
int find_1(int **p, int nRow, int nCol);
int find_Rect(int **p, int x, int y, int nRow, int nCol);
int main()
{
int nRow = 0, nCol = 0;
cin >> nRow >> nCol;
int **p = new int*[nRow]();
for (int n0 = 0; n0 < nRow; ++n0)
p[n0] = new int[nCol]();
for (int n = 0; n < nRow; ++n)
for (int m = 0; m < nCol; ++m)
cin >> p[n][m];
cout << find_1(p, nRow, nCol);
return 0;
}
int find_1(int **p,int nRow,int nCol) {
int max = 0;
for (int n = 0; n < nRow; ++n)
for (int m = 0; m < nCol; ++m)
if (p[n][m] != 0) {
int tmp = 0;
tmp = find_Rect(p, n, m, nRow, nCol);
if (tmp) {
max = tmp > max ? tmp : max;
}
else continue;
}
return max;
}
int find_Rect(int **p, int x, int y, int nRow, int nCol) {
int length = 0;
for (int m0 = y; m0 < nCol; ++m0) {
if (p[x][m0] == 1)
length++;
else break;
}
for (int m = x; m < ((x + length)>nRow?nRow:(x+length)); ++m)
for (int n = y; n < ((y + length)>nCol?nCol:(y+length)); ++n)
if (p[m][n] != 1) {
int tmp = m > n ? m : n;
length = length > tmp ? tmp : length;
}
if (length>(nRow - x))length = (nRow - x);
return length;
}