微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[USACO5.3]巨大的牛棚Big Barn

[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 举报,一经查实,本站将立刻删除。

相关推荐