【以前的空间】bzoj [ZJOI2007]棋盘制作
具体可以去跪《浅谈用极大化思想解决最大子矩形问题》(p.s. 蒟蒻跪了还是很晕,不过想到之前usaco好像是最后一章的一道题……看了下代码顿然醒悟)
也就是如果用o(nm)的方法维护一个极大矩阵?其实很简单,按行处理,维护u[],l[],r[](向上,向左,向右)每一行先预处理处理出这行中每一个点向右能延展多长(right[j]),向左能延展多长(left[j]),然后再开始处理这一行的点,具体做法是比较这个点(i,j)与上行同一列的点(i-1,j)是否可以连在一起,可以的话,那么u[j]++,l[j]=min(left[j],l[j]),r[j]:=min(right[j],r[j]),如果不可以,那么u[j]=1,l[j]=left[j],r[j]=right[j]。记住u[],l[],r[]的作用,他们表示一个如果以这一行为底边,那么包括进j点的最大矩形的形状u[j]*(r[j]+l[j]-1)。然后好像就是这样了吧。
var
map,f:array[..,..]of longint;
left,right,u,l,r:array[..]of longint;
i,j,k,n,m,ans:longint; function min(x,y:longint):longint;
begin
if x>y then exit(y);
exit(x);
end; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; procedure work1;
var
i,j,k:longint;
begin
ans:=;
for i:= to n do
for j:= to m do begin
if (i=)or(j=) then begin
f[i,j]:=;
continue;
end;
if (map[i-][j]=map[i][j])
or (map[i,j-]=map[i,j])
or (map[i-,j-]<>map[i][j]) then begin
f[i,j]:=;
continue;
end;
f[i,j]:=min(f[i-][j],min(f[i,j-],f[i-,j-]))+;
if f[i,j]>ans then ans:=f[i,j];
end;
writeln(ans*ans);
end; procedure work2;
var
i,j,k:longint;
begin
ans:=;
for i:= to n do begin
left[]:=;
right[m]:=;
for j:= to m do
if map[i,j-]<>map[i,j] then left[j]:=left[j-]+ else left[j]:=;
for j:=m- downto do
if map[i,j+]<>map[i,j] then right[j]:=right[j+]+ else right[j]:=;
for j:= to m do begin
if i= then begin
u[j]:=;
l[j]:=left[j];
r[j]:=right[j];
end
else
if map[i-,j]<>map[i,j] then begin
inc(u[j]);
l[j]:=min(l[j],left[j]);
r[j]:=min(r[j],right[j]);
end
else begin
u[j]:=;
l[j]:=left[j];
r[j]:=right[j];
end;
ans:=max(ans,(r[j]+l[j]-)*u[j]);
end;
end;
writeln(ans);
end; begin
readln(n,m);
for i:= to n do
for j:= to m do
read(map[i,j]);
work1;
work2;
end.
p.s. 其实看了丽洁姐的代码,发现自己真是傻掉了,两问明明是可以并在一起求得嘛,(r[j]+l[j]-1)、u[j]不就是矩形的长和高,那么两者中肯定存在一个短边构成的正方形……
【以前的空间】bzoj [ZJOI2007]棋盘制作的更多相关文章
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- 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]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
- 【BZOJ 1057】 1057: [ZJOI2007]棋盘制作
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的 ...
- BZOJ 1057:[ZJOI2007]棋盘制作(最大01子矩阵+奇偶性)
[ZJOI2007]棋盘制作 时间限制: 20 Sec 内存限制: 162 MB[题目描述]国际象棋是世界上最古老的博 ...
- BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...
- 洛谷 P1169 [ZJOI2007]棋盘制作
2016-05-31 14:56:17 题目链接: 洛谷 P1169 [ZJOI2007]棋盘制作 题目大意: 给定一块矩形,求出满足棋盘式黑白间隔的最大矩形大小和最大正方形大小 解法: 神犇王知昆的 ...
- BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1848 Solved: 936 [Submit][Sta ...
- P1169 [ZJOI2007]棋盘制作 && 悬线法
P1169 [ZJOI2007]棋盘制作 给出一个 \(N * M\) 的 \(01\) 矩阵, 求最大的正方形和最大的矩形交错子矩阵 \(n , m \leq 2000\) 悬线法 悬线法可以求出给 ...
随机推荐
- YARN 与Maprd 配置
<!-- yarn 配置 --> <!-- yarn-sit.xml --> <property> <name>yarn.resourcemanager ...
- L010小结后自考题
. 查询2号分区的inode和block的数量和尺寸 . 在lcr文件夹下创建一个a文件夹,然后进入文件夹中,创建3个3层目录,5个1层目录,5个文件 . 滤出a文件夹下的所有一级目录(4种方法) . ...
- php session存入redis
php的会话默认以文件的形式存在,可以配知道NOSQL中,既可以提高访问速度又能好好的实现回话共享,在后期做负载均衡时实现多台服务器session 同步也是比较方便: 一:在php配置文件中改 修改p ...
- 「日常训练」Two Substrings(Codeforces Round 306 Div.2 A)
题意与分析 一道非常坑的水题.分析醒了补. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB emplace_back ...
- hdu1848Fibonacci again and again(sg函数)
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- Postman 高级用法指南
Postman是一款强大的API接口测试工具,有许多不容易发现的好用的功能,下面简单介绍其中一部分功能.详细内容可以参考文档,官方还有视频教程,非常方便入手.后续本博客会持续提供一些Postman使用 ...
- APP九宫格滑动解锁的处理
写手机自动化测试脚本关于APP九宫格滑动解锁方面采用了appium API 之 TouchAction 操作. 先是用uiautomatorviewer.bat查询APP元素坐标: 手工计算九宫格每个 ...
- NGUI组件整理总结
一图流: 注意: private void RClickUI(Vector3 newPos) { this.gameObject.SetActive(true); this.transform.loc ...
- Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat
第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...
- 为什么Python在列表和元组的末尾允许使用逗号?
Python 允许您在列表,元组和字典的末尾添加一个尾随逗号: [1, 2, 3,] ('a', 'b', 'c',) d = { "A": [1, 5], "B&quo ...