传送门(洛谷)
此题与最大正方形一模一样!!
f
[
i
]
[
j
]
表
示
以
i
行
j
列
最
大
正
方
形
大
小
f[i][j]表示以i行j列最大正方形大小
f[i][j]表示以i行j列最大正方形大小
具体分析
/*************************
* Time 2019.7.28
* User mzg1824_TY
* Algrothim 动态规划
*************************/
#include<bits/stdc++.h>
#define rep(i,a,b) for(register int (i)=(a);(i)<=(b);(i)++)
#define don(i,a,b) for(register int (i)=(a);(i)>=(b);(i)--)
using namespace std;
const int maxn=1e6+10;
const int maxm=1e3+10;
int n,m;
int f[maxm][maxm],mapp[maxm][maxm];
template <class t> inline void read(t &x)
{
x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=10*x+ch-'0';ch=getchar();}
x*=f;
}
template <class t> inline void write(t x) {
if(x<0) {putchar('-');x=~x+1;}
if(x>9) write(x/10);
putchar(x%10+48);
}
void readdata() {
memset(f,false,sizeof(f));
read(n),read(m);
rep(i,1,n)
rep(j,1,n) mapp[i][j]=1;
rep(i,1,m) {
int x,y;
read(x),read(y);
mapp[x][y]=0;
}
}
void work()
{
int ans=0;
rep(i,1,n)
rep(j,1,n) {
if(mapp[i][j]==1)
f[i][j]=min(f[i-1][j],min(f[i-1][j-1],f[i][j-1]))+1;
ans=max(ans,f[i][j]);
}
write(ans);
putchar('\n');
/*rep(i,1,n) {
putchar('\n');
rep(j,1,n)
printf("%d ",mapp[i][j]);
}*/
}
int main()
{
//freopen("input.txt","r",stdin);
readdata();
work();
return 0;
}