P1387 最大正方形

题意:找出最大的一个正方形;

思路:很显然,我们需要进行状态转移的点肯定要保证当前位置的权值为1

    所以,当我们在某个点进行转移的时候呢,只需要看3个点的情况,找出他们的最小值+1即可

      哪三个呢?  左 上 左上这三个点

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e2+10;
 4 int dp[maxn][maxn];
 5 int main()
 6 {
 7     int n,m;
 8     scanf("%d%d",&n,&m);
 9     int ans=0;
10     for(int i=1;i<=n;i++)
11     for(int j=1;j<=m;j++){
12         int tmp;
13         scanf("%d",&tmp);
14         if(tmp==1){
15             dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
16             ans=max(ans,dp[i][j]);
17         }
18     }
19     printf("%d\n",ans);
20 }
View Code

 

posted @ 2020-04-02 17:08  古比  阅读(107)  评论(0编辑  收藏  举报