După ce a rezolvat problema propusă de tatăl sau, Robert a prins drag de algoritmică. După câteva probleme rezolvate a dat peste o problemă pe care nu a putut-o rezolva. Având o matrice pătratică cu elemente 0 și 1 el trebuie sa afle dimensiunea maximă a unei submatrice pătratice ce conține numai valori 1. Robert este foarte confuz, și vă roagă din nou să îl ajutați. Ca răsplată vă promite 100 de puncte dacă îl ajutați să rezolve și această problemă. Ce ziceți ? Îl ajutăm din nou ?
Cerința
Fiind dată o matrice pătratică de dimensiune n cu valori 0 și 1, să se determine dimensiunea maximă a unei submatrice ce conține numai valori 1.
Date de intrare
Fișierul de intrare submatrix.in conține pe prima linie numărul n reprezentând dimensiunea matricei. Următoarele n linii conțin câte n numere din mulțimea {0,1}.
Date de ieșire
Fișierul de ieșire submatrix.out va conține pe prima linie o valoare naturală L, reprezentând dimensiunea maxima a unei submatrice ce conține numai valori 1.
Restricții și precizări
1 ≤ n ≤ 1000- Pentru 10% din teste
n≤10
Exemplul 1
submatrix.in
4 1 1 0 1 1 1 0 0 1 0 1 1 1 1 0 1
submatrix.out
2
Exemplul 2
submatrix.in
4 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0
submatrix.out
3
#include <bits/stdc++.h>
using namespace std;
ifstream cin("submatrix.in");
ofstream cout("submatrix.out");
int n , a[1001][1001] , d[1001][1001] , maxi;
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; ++i)
for(int j = 1 ; j <= n ; ++j)
{
cin >> a[i][j];
if(i==1) d[1][j]=a[i][j];
else if(j==1) d[i][1]=a[i][j];
}
for(int i = 2 ; i <= n ; ++i)
for(int j = 2 ; j <= n ; ++j)
{
if(a[i][j]==1) d[i][j]=min(d[i-1][j] , min(d[i-1][j-1] , d[i][j-1]))+1;
if(d[i][j]>maxi) maxi=d[i][j];
}
cout << maxi;
}