Dp 最长的边长由最短的边长决定
#include <iostream>
using namespace std;
const int N = 1010;
int n,m;
int f[N][N];
int main(){
int res = 0;
cin >> n >> m;
for(int i = 1;i <= n;++i){
for(int j = 1;j <= m;++j){
int w;
cin >> w;
if(w == 1){
f[i][j] = min(f[i - 1][j - 1], min(f[i][j - 1], f[i - 1][j])) + 1;
res = max(res,f[i][j]);
}
}
}
cout << res * res << endl;
return 0;
}