zoukankan      html  css  js  c++  java
  • P1387 最大正方形

    https://www.luogu.org/problem/show?pid=1387

    法1:矩阵前缀和(n^3)
    枚举点i,j 和边长o,如果右下角与左下角之间的数是完全平方数,既是正方形。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<string>
    #include<map>
    #define LL long long
    using namespace std;
    int w[109][109],s[109][109],n,m;
    int main()
    {
        int ans=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
         for(int j=1;j<=m;j++)
         {
            scanf("%d",&w[i][j]);
            //if(w[i][j]) ans=1;
         }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+w[i][j];    
            }
        }
    
        for(int i=1;i<=n;i++)
         for(int j=1;j<=m;j++)
         {
            for(int o=1;o<=min(n-i,m-j);o++)
            {
                if(s[i+o][j+o]+s[i][j]-s[i+o][j]-s[i][j+o]==(o*o))
                 ans=max(ans,o);
            }
         }
        printf("%d",ans);
        return 0;
    }

    法2:dp
    详见
    if(w[i][j])f[i][j]=min(f[i][j-1],f[i-1][j],f[i-1][j-1])+1;

    f[i][j]表示以i,j为右下角的正方形的最大边长

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<string>
    #include<map>
    #define LL long long
    using namespace std;
    int w[109][109],f[109][109],n,m;
    int main()
    {
        int ans=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
         for(int j=1;j<=m;j++)
         {
            scanf("%d",&w[i][j]);
         }
        for(int i=1;i<=n;i++)
         for(int j=1;j<=m;j++){
            if(w[i][j]) 
             f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1,
             ans=max(ans,f[i][j]);
         }
        printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    遍历指定目录及其子目录下所有文件
    vim 配置
    解决 Mendeley Linux 中文输入问题
    全角半角字符对照表
    chrome 替换多线程下载管理器
    查看系统日志
    中大东校区iNode For linux 配置笔记
    anaconda 虚拟环境笔记
    linux 网络操作
    deepin 装机
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587929.html
Copyright © 2011-2022 走看看