题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1
输出样例#1:

2

暴力A了(有技巧的暴力)
/*
二维前缀和枚举
这样的水题搞了一个多小时,原来是公式背错了......
枚举每一个子矩阵的和是否等于边长的平方 自己yy的,没想到还过了
不算慢。
但其实是dp......又伤心了
*/ #include<iostream>
#include<cstdio>
#define maxn 101 using namespace std;
int n,m,ans,tot,cnt;
int s[maxn][maxn],map[maxn][maxn],sum[maxn][maxn]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&map[i][j]);
s[i][j]=s[i][j-]+map[i][j];
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
sum[i][j]=sum[i-][j]+s[i][j]; for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
int p=i,q=j,tmp=;
if(map[p][q]== && sum[p][q]-sum[i-][q]-sum[p][j-]+sum[i-][j-]==tmp*tmp && p<=n&&q<=m)
{
while(map[p][q]== && sum[p][q]-sum[i-][q]-sum[p][j-]+sum[i-][j-]==tmp*tmp && p<=n&&q<=m)
p++,q++,tmp++;
ans=max(ans,p-i);
}
}
printf("%d\n",ans);
return ;
}

正解dp

//其实方程很好想,就是没勇气写,怕给输出0.... 

#include<iostream>
#include<cstdio> using namespace std;
int a[][]= {{}},f[][]= {{}},n,m,maxb=; int minn(int a,int b,int c)
{
return min(min(a,b),c);
} int main()
{
cin>>n>>m;
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
cin>>a[i][j];
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
{
if(a[i][j]==) continue;
f[i][j]=minn(f[i-][j],f[i][j-],f[i-][j-])+;
}
for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
if(f[i][j]>maxb)
maxb=f[i][j];
cout<<maxb;
}

洛谷P1387最大正方形(dp,前缀和)的更多相关文章

  1. 洛谷 p1387最大正方形

    洛谷 p1387最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来 ...

  2. 洛谷P1387 最大正方形

    题目描述 题目链接:https://www.luogu.org/problemnew/show/P1387 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输 ...

  3. 洛谷 P1387 最大正方形 Label:奇怪的解法

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  4. 洛谷 P1387 最大正方形 【dp】(经典)

    题目链接:https://www.luogu.org/problemnew/show/P1387 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式: 输入 ...

  5. 洛谷 [P1387] 最大正方形

    本题非常有趣. (n^6) 枚举四个端点,每次遍历矩阵求解. (n^4) 先处理前缀和,枚举四个端点,每次比较前缀和和正方形面积. (n^3) 枚举左上方端点,在枚举边长,前缀和优化 (n^2logn ...

  6. (Java实现) 洛谷 P1387 最大正方形

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  7. 洛谷1387 二维dp 不是特别简略的题解 智商题

    洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. ...

  8. 洛谷P3928 Sequence2(dp,线段树)

    题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...

  9. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

随机推荐

  1. Oracle创建用户、角色、授权、建表空间

    oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system privilege )可以让用户执行特定的命令集.例如,create table权限允许用户创建表,gr ...

  2. Linux之 sed用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  3. Linux 服务器 U盘安装(避免U盘启动)以及拔除U盘后无法引导系统

    一.U盘制作 首先下载两个文件: ·         rhel-server-6.3-i386-boot.iso    启动镜像 ·         rhel-server-6.3-i386-dvd. ...

  4. APUE 文件IO

    文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操 ...

  5. radis入门

    redis介绍 是远程的,有客户端.服务端 存内存,吃内存 应用场景 缓存 队列 list操作 push pop 数据存储[根据redis硬盘持久化的机制,这里不展开] 5种数据类型 string 字 ...

  6. buf.readInt16BE()

    buf.readInt16BE(offset[, noAssert]) buf.readInt16LE(offset[, noAssert]) offset {Number} 0 noAssert { ...

  7. 微信小程序理解8大误区,你中招了吗?

    2016年年底程序员话题中最火的是什么?莫过于微信小程序!小程序被炒得沸沸扬扬,再次证明一点,微信想让什么火,真的就能让什么火!这种能力真是全中国再也没有人有了,政府也没有.但是,小程序刚刚开始,你对 ...

  8. docker插件

    import docker c = docker.Client(base_url='unix://var/run/docker.sock',version='1.15',timeout=10) pri ...

  9. 【01】bootstrap基本信息

    [01]基本信息   中文官网:http://www.bootcss.com/ 英文官网:https://github.com/twbs/bootstrap/   支持IE8+   CND : htt ...

  10. http://localhost/main/company/jurtion---外卖权限添加

    http://localhost/main/company/jurtion---外卖权限添加