题解 P1387 【最大正方形】
传送门
搞不清楚为什么这一题要DP . . . . . .
思路:
- \(n\le100\),考虑暴力。
- 要求一大块区间内都是1,考虑前缀和。
- 在矩阵中求一个符合条件的子矩阵,考虑\(n^3\)的“压行”做法。
具体实现:
- 读入时,先记录每一层的前缀和,再把上一次的前缀和加进来。
- \(n^2\)枚举正方形的上界和下界,顶着上界下界\(O(n)\)扫描记录答案。
- 若当前的上界下界的距离\(\le ans\)跳过
直接上代码。用了宏定义和快读,但很好理解,初学者都能一眼就懂..
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<vector>
#include<set>
#include<map>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bitset>
#include<ctime>
using namespace std;
#define TMP template < class ins >
#define endl '\n'
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;t++)
#define ERP(t,a) for(register int t=head[(a)];t;t=e[t].nx)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;t--)
typedef long long ll;
TMP inline ins qr(ins tag){
char c=getchar();
ins x=0;
int q=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
const int maxn=105;
int data[maxn][maxn];
int sum[maxn][maxn];
int n,m;
int ans;
inline void init(){
n=qr(1);
m=qr(1);
RP(t,1,n){
RP(i,1,m)
sum[t][i]=(data[t][i]=qr(1))+sum[t][i-1];
//记录当前行前缀和
RP(i,1,m)
sum[t][i]+=sum[t-1][i];
//把上一行前缀和加进来
}
return;
}
inline bool jde(int x1,int y1,int x2,int y2){
int cmp=(abs(x1-x2)+1)*(abs(y1-y2)+1);
//计算面积
int sttd=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
//(x1-1,y1-1)到(1,1)的矩阵被减了两次,要补偿回来
return cmp==sttd;
}
inline void eff(){
RP(t1,1,n){//枚举上界
RP(t2,t1,n){//枚举下界
int k=t2-t1+1;
//计算当前上下界对应的正方形大小
if(k<=ans)
continue;
//最优性剪枝
RP(t,k,m)//扫描一遍,
if(jde(t1,t-k+1,t2,t)){
ans=k;break;
//可以直接记录答案,因为前面已经最优性剪枝了
}
}
}
cout<<ans<<endl;
}
int main(){
#define debugged
#ifdef debug
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
init();
eff();
return 0;
}
题解 P1387 【最大正方形】的更多相关文章
- P1387 最大正方形&&P1736 创意吃鱼法
P1387 最大正方形 P1736 创意吃鱼法 两道类似的$DP$ 转移方程基本上类似于$f[i][j]=min(f[i-1][j-1],min(f[i][j-1],f[i-1][j]))$ 考虑构成 ...
- 洛谷 p1387最大正方形
洛谷 p1387最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来 ...
- 洛谷P1387 最大正方形
题目描述 题目链接:https://www.luogu.org/problemnew/show/P1387 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输 ...
- P1387 最大正方形
2018-08-16 https://www.luogu.org/problemnew/show/P1387 题意: 略. 4 4 0 0 1 1 把这个翻译成dp的形式 0 0 1 1 ...
- 洛谷 P1387 最大正方形 【dp】(经典)
题目链接:https://www.luogu.org/problemnew/show/P1387 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入格式: 输入 ...
- P1387 最大正方形 && P1736 创意吃鱼法(DP)
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- 洛谷 P1387 最大正方形 Label:奇怪的解法
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- 洛谷 [P1387] 最大正方形
本题非常有趣. (n^6) 枚举四个端点,每次遍历矩阵求解. (n^4) 先处理前缀和,枚举四个端点,每次比较前缀和和正方形面积. (n^3) 枚举左上方端点,在枚举边长,前缀和优化 (n^2logn ...
- P1387 最大正方形 dp
思路: i j的最大正方形等于min(他的斜上方的的最大正方形,他的上方有的连续1,他的左方有的连续1)+1 #include<bits/stdc++.h> using namespac ...
随机推荐
- luogu P1489 猫狗大战
题目描述 新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵. 比赛开始 ...
- the Red Sun
题面 Description 给定一张 N 个点的图, 点的标号为 1 到 n . 我们进行 M 次连边, 每次连边可以描述为 a b c d w : for i = a to b do for j ...
- hdu1420(C++)
数论中模的运算: a*b%n=(a%n)*(b%n)%c; (a+b)%n=(a%n+b%n)%n; 幂的模:A^n%c=r 于是A^(n+1)%c=A*r%c; #include<ios ...
- 使用virtualenv, uwsgi, nginx来布署django
http://blog.csdn.net/lihao21/article/details/47731903 http://www.cnblogs.com/lxg226/p/3468558.html h ...
- 手动编译高速扫描器MasScan
常见的端口扫描器有NMAP,ZMAP,superScan等,我们使用后各有千秋,ZMAP号称44分钟扫全球ip,那么有没有比ZMAP更快的端口扫描器呢,今天我们来研究下masscan,这款扫描器号称3 ...
- python函数式编程学习之map,reduce,filter,sorted
map(f, list)函数用于将函数f运用到list里的每个元素中 写个例子 def pow(x): return x*x map(pow, [2,3,4]) reduce(f, list)函数用于 ...
- 【Java编程】JDBC注入攻击-Statement 与 PreparedStatement
在上一篇[Java编程]建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement我们介绍了怎样使用JDBC驱动建立一个简单的 ...
- 后台CMS日志处理记录
自从上一次添加了极光推送之后,我的工程就像是着魔了一样,不管怎么调整,日志级别都是DEBUG. 启动一次工程会打印很多无用日志,今天决定抽时间去研究了一下,最终解决了问题,下面记录一下解决过程. 1. ...
- Linux 指令篇:系统设置--set
功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:set指令能设置所使用shell的执行方式,可依照不同的需求来做设置. 参 数: -a 标示已修改 ...
- eclipse安装Memory Analyzer
转载:http://blog.csdn.net/lindir/article/details/8743610 2个月没有写博客了,最近一直在考虑自己未来的方向,再加上项目较紧,一直未更新.今天想着要好 ...