博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1387 最大正方形
阅读量:6922 次
发布时间:2019-06-27

本文共 1532 字,大约阅读时间需要 5 分钟。

题目描述

题目链接:https://www.luogu.org/problemnew/show/P1387

在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。

输入输出格式

输入格式:

 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.

 输出格式: 

一个整数,最大正方形的边长 

输入输出样例

输入样例#1:

4 40 1 1 11 1 1 00 1 1 01 1 0 1

输出样例#1:

2

算法解析:

来源:http://www.cnblogs.com/CXSheng/p/7801313.html

本题也可以参考

动态规划,求什么设什么。

设maxSize[i][j] = 以a[i][j]为右下角的最大正方形边长,

则maxSize[i][j] = k代表着a[i][j]左上方k*k区域内的数字都是1,

起初我想,如果a[i][j]是1,那么就可以把maxSize[i-1][j-1]代表的一大片矩形的边长扩大1.

即maxSize[i][j]=

①  0 ,a[i-1][j-1]==0 or 边界;

②  maxSize[i-1][j-1]+1 , a[i-1][j-1]!=0;

 

但是!这是片面的,因为我忽略了a[i][j]正上方和正左方是否存在0的情况。

如图:

 

假设我们要求maxSize[i][j]对应着最右下角的红点,

浅蓝色的圈是maxSize[i-1][j-1]对结果的影响;

橙色的圈是a[i][j]正上方连续的1对结果的影响;

绿色的圈是a[i][j]正左方连续的1对结果的影响;

总图如下:

去三个值中最小的,记入maxSize[i][j]

综上可知,更新设定:

当a[i][j]为1时:

设maxSize[i][j] = 以a[i][j]为右下角的最大正方形边长,

LeftNum1[i][j] = a[i][j](不包括)正左边连续1的个数,

UpNum1[i][j] = a[i][j](不包括)正上方边连续1的个数,

于是maxSize[i][j] = min(maxSize[i-1][j-1]+1,leftNum1[i][j]+1,upNum1[i][j]+1)

注意边界情况即可。

 

1 #include
2 #define MAXN 100 3 #define MAXM 100 4 int array[MAXN+1][MAXM+1]={
0}; 5 int maxSize[MAXN+1][MAXM+1]={
0}; 6 int leftNum1[MAXN+1][MAXM+1]={
0}; 7 int upNum1[MAXN+1][MAXM+1]={
0}; 8 int n,m; 9 int Figure(int tempN,int tempM)10 {11 if(tempN-1==0||tempM-1==0||array[tempN-1][tempM-1]==0)12 return 1;13 int min=maxSize[tempN-1][tempM-1]+1;14 if(leftNum1[tempN][tempM]+1
maxans)69 maxans=maxSize[i][j];70 }71 tPrint();72 printf("%d\n",maxans);73 return 0;74 }

类似参考题目: 

洛谷  

 

你可能感兴趣的文章
sicp4.1.1-4.1.5节部分习题尝试解答(update)
查看>>
Nature重磅| IBM再放大招!量子计算今年实现商业通用!
查看>>
Clojure世界:XML处理
查看>>
构建你的数据科学作品集:机器学习项目
查看>>
《HTML5游戏编程核心技术与实战》——2.4 坐标变换
查看>>
《R数据可视化手册》——导读
查看>>
《JavaScript入门经典(第6版)》——第1章 JavaScript简介 1.1 Web脚本编程基础
查看>>
轻松使用“Explain Shell”脚本来理解 Shell 命令
查看>>
为什么ConcurrentHashMap是弱一致的
查看>>
《OpenACC并行编程实战》—— 3.5 计算构件parallel
查看>>
《编写可维护的JavaScript》——1.5 空行
查看>>
用R语言进行数据可视化的综合指南(一)
查看>>
不越狱就能监控苹果手机? iCloud备份成漏洞
查看>>
《Surface玩全不求人》一1.2 Windows 8平板王朝的前世今生
查看>>
Linux有问必答:如何在Linux Mint Cinnamon启用桌面共享
查看>>
《HBase实战》一2.4 小结
查看>>
《Nmap渗透测试指南》—第1章1.8节全面扫描
查看>>
【阿里云资讯】惊叹央企云速度,中国化工推云上电商平台
查看>>
各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
查看>>
spring mvc 实现远程服务调用的几种方式
查看>>