【以前的空间】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\) 悬线法 悬线法可以求出给 ...
随机推荐
- 四、新时间日期API
一.使用 LocalDate .LocalTime .LocalDateTime LocalDate.LocalTime.LocalDateTime 类的实例是不可变的对象,分别表示使用 ISO-86 ...
- Python 列表下标操作
Python 列表下标操作 引用网址: https://www.jianshu.com/p/a98e935e4d46
- coolshell里的一些c++文章
c++数组不支持多态 https://coolshell.cn/articles/9543.htmlwhy gcc in c++ https://airs.com/ian/cxx-slides.pdf ...
- 快速写一个babel插件
es6/7/8的出现,给我们带来了很多方便,但是浏览器并不怎么支持,目前chrome应该是支持率最高的,所以为了兼容我们只能把代码转成es5,这应该算是我们最初使用babel的一个缘由,随着业务的开发 ...
- ubuntu server guide 学习笔记
1. 软件包 1.1. dpkg dpkg -l dpkg -l | grep apache2 dpkg -L ufw dpkg -S /etc/host.conf dpkg -i zip_3.0-4 ...
- kubernetes相关
1.获取client , api-server 加token 或in-cluster方式 2.所有对象均有list update get 等方法 3.对象属性源码追踪,yaml与源码一一对应 4.一些 ...
- 从零开始的Python学习Episode 6——字符串操作
字符串操作 一.输出重复字符串 print('smile'*6) #输出6个smile 二.通过引索输出部分字符串 print('smile'[1:]) print('smile'[1:3]) #输出 ...
- JavaScript筑基篇(一)->变量、值与对象
说明 JavaScript中变量.值.对象的理解.本文为了简化理解,前半部分暂时刨除与执行上下文的相关概念.另外本文是个人的见解,如有疑问或不正支持,欢迎提出指正和讨论! 目录 前言 参考来源 变量与 ...
- 面试中要注意的 3 个 JavaScript 问题
JavaScript 是 所有现代浏览器 的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函 ...
- 2018-9-25kanboard安装及使用
2018-9-25kanboard安装及使用 教程 小书匠 欢迎走进zozo的学习之旅. 简介 运行官方docker容器 使用kanboard 简介 Kanboard的安装提供了两种方式一种是直接安 ...