https://www.luogu.org/problemnew/show/P2733
思路:dp[i][j]表示第i,j的位置之前有多大的正方形,然后统计一下大于i的就是i的正方形
#include <iostream>
#include <cstdio>
using namespace std;
int n,mp[260][260],a[260][260];
int arr[260];
int main() {
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
char c;
cin>>c;
mp[i][j]=c-'0';
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int m=min(mp[i-1][j-1],min(mp[i-1][j],mp[i][j-1]));
if(m&&mp[i][j]){
mp[i][j]=m+1;
}
}
}
for(int k=2;k<=250;k++)
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mp[i][j]>=k)arr[k]++;
}
}
for(int i=2;i<=250;i++){
if(arr[i]){
cout<<i<<" "<<arr[i]<<endl;
}
}
return 0;
}