zoukankan      html  css  js  c++  java
  • VIJOS P1057盖房子 (动态规划)

    https://vijos.org/p/1057

    【题意】在一个 n*m 的土地中 中有瑕疵的为0 完好的为1   其中最大的正方形无瑕疵土地 输出其边长。

    【思路】d[i][j]为 以点 i j 为左上角的正方形最大的边长

              显然要是a[i][j]=0 则d[i][j]=0

              要是a[i][j]=1 则 d[i][j]=min(d[i+1][j],d[i+1][j+1],d[i][j+1])+1  ( 画一下图就知道了 )

    【注意】for(j=m;j>=1;j--)

                     for(i=n;i>=1;i--)   这样才能保证在算d[i][j]时已经算出  d[i+1][j],d[i+1][j+1],d[i][j+1] 了

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    int a[1002][1002],d[1002][1002];//d[i][j]以i j 为左上角的顶点
    
    int min(int a,int b,int c)
    {
        if(a<=b&&a<=c)
            return a;
        if(b<=a&&b<=c)
            return b;
        return c;
    }
    
    int main()
    {
        int i,j,n,m,t,k,q;
        while(~scanf("%d%d",&n,&m))
        {
            for(i=1;i<=n;i++)
                for(j=1;j<=m;j++)
                    scanf("%d",&a[i][j]);
                memset(d,0,sizeof(d));
                int maxx=0;
                for(j=m;j>=1;j--)
                    for(i=n;i>=1;i--)
                    {
                        if(a[i][j]==1)
                             d[i][j]=min(d[i+1][j],d[i+1][j+1],d[i][j+1])+1;
                        else
                            d[i][j]=0;
                        if(maxx<d[i][j])
                            maxx=d[i][j];
                    }            
        }    
        return 0;
    }
  • 相关阅读:
    SpringData概述
    运行javac 报告javac不是内部或外部命令,但是运行java、java-version正常
    Spring Data JPA
    spring-data-jpa 介绍 复杂查询,包括多表关联,分页,排序等
    Thymeleaf使用说明
    Specifications查询
    OA项目_环境搭建
    anu
    anu
    anu
  • 原文地址:https://www.cnblogs.com/assult/p/3446549.html
Copyright © 2011-2022 走看看