[TimeGate]
https://www.luogu.org/problem/P2701
【解题思路】
f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
f(i,j)表示以(i,j)为右下角的最大正方形的边长。
【code】
1 #include <cstdio>
2 #include <iostream>
3 #include <algorithm>
4 using namespace std; 5 int n,t,x,y,ans=-1<<29; 6 bool vis[1005][1005]; 7 int f[1005][1005]; 8 int main(){ 9 //freopen("2701.in","r",stdin); 10 //freopen("2701.out","w",stdout);
11 scanf("%d%d",&n,&t); 12 while(t--){ 13 scanf("%d%d",&x,&y); 14 vis[x][y]=true; 15 } 16 for(register int i=1;i<=n;i++){ 17 for(register int j=1;j<=n;j++){ 18 if(!vis[i][j]) 19 f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))+1; 20 ans=max(ans,f[i][j]); 21 } 22 } 23 printf("%d\n",ans); 24 return 0; 25 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。