zoukankan      html  css  js  c++  java
  • luogu P1681 最大正方形II

    原题链接:https://www.luogu.org/problem/show?pid=1681

    交了十几遍才过,本来这只是一道水题,然而谁让我快读写炸了呢(详情见“GG记录(6)”)。。。

    f[i][j]表示i,j位置为右下角的最大正方形

    如果i或j为1,很显然,f[i][j]的值最大为1,否则便要从三个方向取最小值转移

    如果不满足转移的条件,将其赋值为1即可

    #include<cstdio>
    void read(int &y)
    {
        y=0;char x=getchar();
        while(x<'0'||x>'9') x=getchar();
        while(x>='0'&&x<='9')
        {
            y=y*10+x-'0';
            x=getchar();
        }
    }
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    int min(int x,int y)
    {
        return x<y?x:y;
    }
    int n,m,x,ans,a[1505][1505],f[1505][1505];
    int main()
    {
        read(n);read(m);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                read(a[i][j]);
                if(i==1||j==1)
                {
                    f[i][j]=1;
                    continue;
                }
                if(a[i][j]==0&&a[i-1][j]==1&&a[i][j-1]==1) f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1;
                else if(a[i][j]==1&&a[i-1][j]==0&&a[i][j-1]==0) f[i][j]=min(min(f[i-1][j-1],f[i-1][j]),f[i][j-1])+1;
                else f[i][j]=1;
                ans=max(f[i][j],ans);
            }
        }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    449. Serialize and Deserialize BST
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    240. Search a 2D Matrix II
    5. Longest Palindromic Substring
    数位DP专题(开坑。
    POJ 2356
    HDU 4055
    HDU 4054
    HDU 1559
  • 原文地址:https://www.cnblogs.com/zeroform/p/7685374.html
Copyright © 2011-2022 走看看