洛谷p1387最大正方形

原題

用搜索最壞情況小於1e10,一般不會超時。

這裏需要一個技巧,f[i][j]表示在i,j點的最大正方形邊長,通過畫圖推導出轉移方程。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<algorithm>
using namespace std;
int n,m,a[101][101],f[101][101],maxx=0;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;++i)
     for(int j=1;j<=m;++j)
      cin>>a[i][j];
    memset(f,0,sizeof(f));
    for(int i=1;i<=n;++i)
     for(int j=1;j<=m;++j)
     {
         if(a[i][j]==1)
          f[i][j]=min(f[i-1][j],min(f[i-1][j-1],f[i][j-1]))+1;
          else f[i][j]=0;
     }
    for(int i=1;i<=n;++i)
     for(int j=1;j<=m;++j)
      if(f[i][j]>maxx)
      maxx=f[i][j];
    cout<<maxx;
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章