zoukankan      html  css  js  c++  java
  • P1387 最大正方形&&P1736 创意吃鱼法

    P1387 最大正方形

    P1736 创意吃鱼法

    两道类似的$DP$

    转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$

    考虑构成正方形。。。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,m,a[105][105],ans=1,f[105][105];
    
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
                if(a[i][j]==1) f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))+1;
                else f[i][j]=0;
                ans=max(f[i][j],ans);
            }
        printf("%d",ans);
        return 0;
    }

    预处理$s[i][j]$表示$i,j$这个点向上延伸最多有多少个0,且没有1;

    $z[i][j]$表示$i,j$这个点向左(或右)延伸最多有多少个0,且没有1;

    状态转移方程:$f[i]][j]=min(f[i-1][j-1],min(s[i-1][j],z[i][j-1]))$(左上到右下)

    右上到左下类似

    #include<bits/stdc++.h>
    
    #define N 2505
    using namespace std;
    
    int a[N][N],s[N][N],z[N][N],n,m,f[N][N],ans;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                scanf("%d",&a[i][j]);
                if(!a[i][j]){
                    s[i][j]=s[i-1][j]+1;
                    z[i][j]=z[i][j-1]+1;
                }
                else f[i][j]=min(f[i-1][j-1],min(s[i-1][j],z[i][j-1]))+1;
                ans=max(ans,f[i][j]);
            }
        memset(z,0,sizeof(z));
        memset(f,0,sizeof(f));
        
        for(int i=1;i<=n;i++)
            for(int j=m;j>=1;j--){
                if(!a[i][j]){
                    z[i][j]=z[i][j+1]+1;
                }
                else f[i][j]=min(f[i-1][j+1],min(s[i-1][j],z[i][j+1]))+1;
                ans=max(ans,f[i][j]);
            }
        printf("%d
    ",ans);
        
        return 0;
    }
    /*
    1 0 0 0 0 0 0 0 0 1
    0 1 0 0 0 0 0 0 1 0
    0 0 1 0 0 0 0 1 0 0
    0 0 0 1 0 0 1 0 0 0
    0 0 0 0 1 1 0 0 0 0
    0 0 0 0 1 1 0 0 0 0
    0 0 0 1 0 0 1 0 0 0
    0 0 1 0 0 0 0 1 0 0
    0 1 0 0 0 0 0 0 1 0
    
    */
  • 相关阅读:
    HTML区块
    HTML表单
    JavaScript 表单验证
    HTML头部
    JavaScript
    设计模式—单例模式的六种写法
    new
    new
    new
    new
  • 原文地址:https://www.cnblogs.com/song-/p/9831065.html
Copyright © 2011-2022 走看看