BZOJ 1057:[ZJOI2007]棋盘制作(最大01子矩阵+奇偶性)
[ZJOI2007]棋盘制作
时间限制: 20 Sec 内存限制: 162 MB
【题目描述】
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源
于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。而我们的主人公小Q,
正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定
将棋盘扩大以适应他们的新规则。小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种
颜色之一。小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可能的大。不过小Q还没有决定是找
一个正方形的棋盘还是一个矩形的棋盘(当然,不管哪种,棋盘必须都黑白相间,即相邻的格子不同色),所以他
希望可以找到最大的正方形棋盘面积和最大的矩形棋盘面积,从而决定哪个更好一些。于是小Q找到了即将参加全
国信息学竞赛的你,你能帮助他么?
【输入】
第一行包含两个整数N和M,分别表示矩形纸片的长和宽。接下来的N行包含一个N * M的01矩阵,表示这张矩形
纸片的颜色(0表示白色,1表示黑色)。
【输出】
包含两行,每行包含一个整数。第一行为可以找到的最大正方形棋盘的面积,第二行为可以找到的最大矩形棋
盘的面积(注意正方形和矩形是可以相交或者包含的)。
【样例输入】
3 3
1 0 1
0 1 0
1 0 0
【样例输出】
4
6
【提示】
N, M ≤ 2000
分析:
我们发现,如果按题目意思直接按照黑白交替原则做很难解决,但如果转变思路,考虑第一行,我们对2,4,6,8...位置取反(0变1,1变0),这时如果奇数位置上的数与偶数位置上的数字全部相等说明实际情况下01是交错出现的,就是符合要求的棋盘的一行,对于第二行,我们对奇数位置取反,以类似方法操作,以此类推。奇数行偶数列取反,偶数行奇数列取反(其实奇奇和偶偶也行),这时,如果平面上一个矩形包含元素满足全部为0或1,它就是一个符合条件的棋盘。于是转化成了最大子矩阵问题,以0作为障碍求一次,以1作为障碍求一次,最大的矩形即为答案。
最大正方形其实差不多,所有符合条件正方形必然包含在矩形中,只要当前矩形最小边平方就是当前正方形面积的值了。
代码:
program chess;
var
a,maxl,minr,h,l,r:array[..,..]of longint;
n,i,m,j,c,ans1,ans2:longint;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
procedure work(c:longint);
var i,j,s:longint;
begin
fillchar(h,sizeof(h),); fillchar(r,sizeof(r),); fillchar(l,sizeof(l),);
for i:= to m+ do begin a[,i]:=c; a[n+,i]:=c; end;
for i:= to n do
begin
maxl[i,]:=; minr[i,m+]:=m+;
for j:= to m do
if a[i,j]=c then maxl[i,j]:=j else maxl[i,j]:=maxl[i,j-];
for j:=m downto do
if a[i,j]=c then minr[i,j]:=j else minr[i,j]:=minr[i,j+];
end;
for i:= to n+ do
begin
for j:= to m do
if a[i-,j]=c then
begin
h[i,j]:=; l[i,j]:=; r[i,j]:=m+;
end else
begin
h[i,j]:=h[i-,j]+;
l[i,j]:=max(l[i-,j],maxl[i-,j]);
r[i,j]:=min(r[i-,j],minr[i-,j]);
s:=(r[i,j]-l[i,j]-)*h[i,j];
if s>ans2 then ans2:=s;
s:=sqr(min(r[i,j]-l[i,j]-,h[i,j]));
if s>ans1 then ans1:=s;
end;
end;
end; begin
readln(n,m);
for i:= to n do begin
for j:= to m do
begin
read(a[i,j]);
if (i mod =)and(j mod =) then a[i,j]:=-a[i,j];
if (i mod =)and(j mod =) then a[i,j]:=-a[i,j];
end; readln;
end;
work(); work();
writeln(ans1); writeln(ans2);
end.
BZOJ 1057:[ZJOI2007]棋盘制作(最大01子矩阵+奇偶性)的更多相关文章
- BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
- BZOJ 1057: [ZJOI2007]棋盘制作
Decsription 给你一个矩阵,求最大了 01相间 的矩阵. Sol DP+悬线法. 这是一个论文啊 <浅谈用极大化思想解决最大子矩形问题>--王知昆. 枚举每一根悬线,记录最左/右 ...
- 【BZOJ 1057】 1057: [ZJOI2007]棋盘制作
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的 ...
- 1057: [ZJOI2007]棋盘制作
1057: [ZJOI2007]棋盘制作 https://www.lydsy.com/JudgeOnline/problem.php?id=1057 分析: 首先对于(i+j)&1的位置0-& ...
- 【BZOJ】1057: [ZJOI2007]棋盘制作(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=1057 同某一题差不多?记不清是哪题了.. 就是每一行进行单调栈维护递增的高度,在进栈和出栈维护一下长 ...
- 1057: [ZJOI2007]棋盘制作 - BZOJ
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
- 【BZOJ】1057 [ZJOI2007]棋盘制作(悬线法)
题目 传送门:QWQ 分析 先把题目给出的矩阵变换一下,如果$ a[i][j] $中$ i+j \mod 2 = 1 $那么就对$ a[i][j] $取一下反. 接着就是求原图中最大的0.1子矩阵 详 ...
随机推荐
- NFS服务器实现文件共享
NFS服务器运行原理 实战配置NFS服务器 配置Samba服务器及实现文件共享 (一)NFS器服务端描述 NFS服务器: Network File System,网络文件系统使FreeBSD支持的一种 ...
- ifup/ifdown ethX 和 ifconfig ehtX up/down的区别
相同点:[启用]和[禁止]网卡 ifup ethX 和 ifconfig ethX up 用来启用网卡设备 ifdown ethX 和 ifconfig ethX ...
- 通过cmd查看环境变量名对应的环境变量值
在VS环境中通常要添加路径,不过基本都是按照往上提供的方法添加变量名形如:$(VC_IncludePath),但是如何通过cmd命令找到真正的路径呢 未完待续……
- 谈谈Integer中的静态类IntegerCache
学习的本质就是一个赋值的过程,用新知识来覆盖你的旧知识或者无知(null).掌握知识是自己的, 分享知识,才能帮助更多的人,创造更大的价值.学贵以恒,以此自勉,与君共享.----曦阳X ...
- redis Connection refused 远程连接错误
redis 远程连接时报错: Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionE ...
- mysql切换数据库提示警告:Reading table information for completion of table and column names
登录数据库后,选择数据库时发现以下提示, mysql> use testReading table information for completion of table and column ...
- 2- vue django restful framework 打造生鲜超市 -环境搭建
使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支付宝支付(暂不支持微信支付),支持手机短信验证码注册, ...
- aop配置问题引发的报错
今天在使用注解配置aop时出现了几次的错误 INFO - Refreshing org.springframework.context.support.ClassPathXmlApplicationC ...
- 多页应用 Webpack4 配置优化与踩坑记录
前言 最近新起了一个多页项目,之前都未使用 webpack4 ,于是准备上手实践一下.这篇文章主要就是一些配置介绍,对于正准备使用 webpack4 的同学,可以做一些参考. webpack4 相比之 ...
- SpringBoot-Security-用户权限分配-项目搭建
SpringBoot原则是约定优于配置,简化spring应用开发,去繁从简,产品级别的应用. SpringBoot有哪些优点1.快速创建独立运行的spring项目与主流框架集成 2.使用嵌入式的ser ...