题意

给定\(n*m\)的棋盘,每个格子有0或1其中的一种颜色。

求一个最大的正方形,满足正方形内0和1相互间隔。

求一个最大的矩形,满足矩形内0和1相互间隔。

\(n,m\leq 2000\)

分析

这是个棋盘,满足相邻两个颜色不同。

我们不难想到对于一个格子\((i,j)\),若\((i+j)\mod 2=1\),那么把\((i,j)\)这个格子的颜色取反。

原问题就变成了求最大相同颜色正方形和最大相同颜色矩形。

只要能解决最大相同颜色矩形,那么正方形的问题也可以用类似的方法解决,所以问题转化为求最大相同颜色矩形。

这是个二维的问题,我们先考虑一维的问题怎样解决:

给定\(c[i]\),求最长一段\([l,r]\),使得\(c[l]=c[l+1]=...=c[r]\)

这是个经典的最大子段问题,我们可以通过贪心求出,对于每个位置求出\(ex[i]\),表示最大的\(ex\),满足\(c[i]=c[i+1]=...=c[i+ex[i]-1]\)

在二维上,我们对于每一行,预处理出\(ex[i][j]\):在第\(i\)行上,最大的\(ex\),使得\(c[i][j]=c[i][j+1]=...=c[i][j+ex-1]\)

那么,一种直观的想法:我们枚举每一个左上角的位置\((i,j)\),枚举纵向向下伸长到\(k\),那么长度为\(w=\min(ex[i][j],ex[i+1][j],...,ex[k][j])\),用\(w*k\)更新答案。

即求:\(\max_{1\leq i\leq m,1\leq j\leq k\leq n}(k-j+1)*(\min_{p=j}^k ex[i][p])\)

但是,这是\(O(n^3)\)的...

我们考虑能否继续优化,即减少枚举量。

思考这样一条性质:\(\min_{p=j}^k ex[i][p]\)必然等于某个\(ex\)。

所以我们枚举\(ex[i][p]\),然后看它最多能向上伸展多少,最多能向下伸展多少,用\(ex[i][p]*len\)即可。

所以只需要快速处理出最多向上伸展多少,向下伸展多少即可。

用单调队列+二分或者ST表可以轻松解决。

小结

(1)最值问题的处理手段

这种东西从今天开始正式被我废除掉了。

并没有什么用。

(2)枚举超时可能会出现在两个问题上:①枚举量过大 ②统计枚举的方法不够优

为此,我们可以有两种考虑方法:

①极大化思想:减少枚举量,找出不可能的满足什么条件,进而可能的满足什么条件

②使用各种数据结构或者算法进行优化

(3)棋盘问题

棋盘问题要明确几个基本的模型和思路。

①染色法

②插头dp,状态压缩dp

③处理处第一行,推出之后的情况

④爆搜

⑤网络流

【bzoj1057】棋盘制作的更多相关文章

  1. 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  2. BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1848  Solved: 936 [Submit][Sta ...

  3. BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3248  Solved: 1636 [Submit][St ...

  4. 洛谷 P1169 [ZJOI2007]棋盘制作

    2016-05-31 14:56:17 题目链接: 洛谷 P1169 [ZJOI2007]棋盘制作 题目大意: 给定一块矩形,求出满足棋盘式黑白间隔的最大矩形大小和最大正方形大小 解法: 神犇王知昆的 ...

  5. bzoj 1057: [ZJOI2007]棋盘制作 单调栈

    题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 2027  Solved: 1019[Submit] ...

  6. 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)) ...

  7. [P1169] 棋盘制作 &悬线法学习笔记

    学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...

  8. 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作

    题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...

  9. P1169 [ZJOI2007]棋盘制作 && 悬线法

    P1169 [ZJOI2007]棋盘制作 给出一个 \(N * M\) 的 \(01\) 矩阵, 求最大的正方形和最大的矩形交错子矩阵 \(n , m \leq 2000\) 悬线法 悬线法可以求出给 ...

  10. [luogu P1169] [ZJOI2007]棋盘制作

    [luogu P1169] [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的 ...

随机推荐

  1. python访问mysql将返回的表转化为json

    ## Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreement ...

  2. 编译android源码官方教程(4)开始编译

    Preparing to Build IN THIS DOCUMENT Obtain proprietary binaries Download proprietary binaries Extrac ...

  3. HDU 5030 Rabbit's String

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5030 题意:给出一个长度为n的串S,将S分成最多K个子串S1,S2,……Sk(k<=K).选出每 ...

  4. socket,TCP/IP的理解

    TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间 ...

  5. CodeForces 219B Special Offer! Super Price 999 Bourles!

    Special Offer! Super Price 999 Bourles! Time Limit:1000MS     Memory Limit:262144KB     64bit IO For ...

  6. mysql数据小姿势

    CREATE TABLE `information` (  `NUMBER` bigint(20) NOT NULL AUTO_INCREMENT,//将number设为自增字段  `USER_NAM ...

  7. ServiceStack.OrmLite 笔记2 -增

    ServiceStack.OrmLite 笔记2 这篇主要介绍 增加 db.Insert(new Employee { Id = 1, Name = "Employee 1" }) ...

  8. 数据库mysql中having 和where的区别

    having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. ...

  9. MYSQL 表级锁 行级锁 页面锁区别

    myisam存储引擎默认是表级锁 innodb存储引擎默认是行级锁 DBD存储引擎默认是页面锁   表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发出锁冲突的概率最高,并发度最低.行级锁:开锁大, ...

  10. Json-lib使用 转载

    1.从Object到String 要先用Object对象构造一个JSONObject或者JSONArray对象,然后调用它的toString()方法即可 (1)示例一 1 Book book=new ...