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

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

题目描述

在一个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

解法1

提供一种很简单的思路。要验证(i,j)能表示多大的正方形的末尾,就要验证(i-1,j)(i,j-1)(i-1,j-1)这三个点中能作为正方形末尾的最小值,然后加上一即可。

代码

1 #include
2 #include
3 #include
4 #include
5 #define min3(a,b,c) min(a,min(b,c)) 6 using namespace std; 7 int ans,a[1005][1005],f[1005][1005],N,M; 8 int main(){ 9 // freopen("01.txt","r",stdin);10 scanf("%d%d",&N,&M);11 for(int i=1;i<=N;i++){12 for(int j=1;j<=M;j++){13 f[i][j]=1;14 scanf("%d",&a[i][j]);15 }16 }17 18 for(int i=1;i<=N;i++){19 for(int j=1;j<=M;j++){20 f[i][j]=a[i][j]*(min3(f[i-1][j],f[i-1][j-1],f[i][j-1])+1);21 ans=max(ans,f[i][j]);22 }23 }24 25 printf("%d\n",ans);26 return 0;27 }

解法2

这个题可以应用二维数组前缀和来求解。

因为只有01这两个数,所以求前缀和会很方便的求助面积来,这样也可以很方便的找到最大边长。

注意前缀和的求法和面积的表示方法,对于二维数组的前缀和,先像一维数组那样求一遍每行的前缀和,再将每一个前缀和加上自己上面的点的前缀和。

而面积的表示:对于i,j点边长为l的正方形,前缀和表示:sum[i][j]-sum[i-l][j]-sum[i][j-l]+sum[i-l][j-l]至于为什么,大家可以自己写几组数据试试。

代码

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 int n,m,ans,ans2; 9 int mapp[105][105];10 int sum[105][105];11 int main()12 {13 scanf("%d%d",&n,&m);14 for (int i=1;i<=n;i++)15 for (int j=1;j<=m;j++)16 scanf("%d",&mapp[i][j]);17 for (int i=1;i<=n;i++)18 {19 for (int j=1;j<=m;j++)20 sum[i][j]=sum[i][j-1]+mapp[i][j];21 for (int j=1;j<=m;j++)22 sum[i][j]+=sum[i-1][j];23 }24 for (int i=1;i<=n;i++)25 {26 for (int j=1;j<=m;j++)27 {28 for (int l=1;l<=min(i,j);l++)29 {30 if(mapp[i][j]==1&&l*l==sum[i][j]-sum[i-l][j]-sum[i][j-l]+sum[i-l][j-l])31 {32 if(ans

 

转载于:https://www.cnblogs.com/radiumlrb/p/5808285.html

你可能感兴趣的文章
AndroidStudio 使用AIDL
查看>>
H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式(包含AAC部分解析)
查看>>
poj 3468 A Simple Problem with Integers 【线段树-成段更新】
查看>>
CentOS---网络配置详解
查看>>
第1阶段——uboot分析之硬件初始化start.S(4)
查看>>
记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义
查看>>
代写初中语文作文|代写初中语文作文技巧分享
查看>>
linux字符设备文件的打开操作
查看>>
Servlet介绍以及简单实例
查看>>
[js高手之路] 跟GhostWu一起封装一个字符串工具库-架构篇(1)
查看>>
Java.ftp上传下载
查看>>
【Node.js】4.从一个例子切入Node js的规范
查看>>
实施微服务架构的关键技术
查看>>
“流”的思维—Workflowy
查看>>
Day19 网络编程
查看>>
.NET平台MongoDB下使用JobStore存储Quartz.Net的Job,Trigger数据
查看>>
Java多线程编程—锁优化
查看>>
python文本 字符与字符值转换
查看>>
Linux虚拟化技术KVM、QEMU与libvirt的关系(转)
查看>>
Ceph分布式存储-原理介绍及简单部署
查看>>