我不是题目的说

这道题运用了一种很巧妙的DP方式:悬线法

如图,蓝色为悬线,黄色为向两边延伸的长度

那么显然,最大子矩形的宽一定是这些黄线中最小的(证明从略)

所以我们可以维护三个数组:

Up[i][j]表示向上延伸的长度

Left[i][j]表示向左能延伸到的最远横坐标

Right[i][j]表示向右能延伸到的最远横坐标

Code:

 #include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,m,maxRec,maxSqr;
int mp[][];
int Up[][];
int Left[][];
int Right[][];
inline void Init(){
cin>>n>>m;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>mp[i][j];
//预处理一:没啥可说的
Left[i][j]=Right[i][j]=j;
Up[i][j]=;
}
}
//预处理二:处理边界
for(int i=;i<=n+;i++)mp[i][]=mp[i][m+]=INF;
for(int j=;j<=m+;j++)mp[][j]=mp[n+][]=INF;
//预处理三:预处理Left、Right数组(黄线)
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mp[i][j]!=mp[i][j-]){
Left[i][j]=Left[i][j-];
}
}
}
for(int i=;i<=n;i++){
for(int j=m-;j>=;j--){
if(mp[i][j]!=mp[i][j+]){
Right[i][j]=Right[i][j+];
}
}
}
}
inline void DP(){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
//更新
if(i>&&mp[i][j]!=mp[i-][j]){
Up[i][j]=Up[i-][j]+;
//注意这里存的是坐标所以Left取max而Right取min
Left[i][j]=max(Left[i][j],Left[i-][j]);
Right[i][j]=min(Right[i][j],Right[i-][j]);
}
//统计矩形,正方形同理
int dis=Right[i][j]-Left[i][j]+;
maxRec=max(maxRec,Up[i][j]*dis);
maxSqr=max(maxSqr,min(Up[i][j],dis)*min(Up[i][j],dis));
}
}
cout<<maxSqr<<endl<<maxRec<<endl;
}
int main(){
Init();
DP();
return ;
}

[洛谷P1169][题解][ZJOI2007]棋盘制作的更多相关文章

  1. 洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作

    洛谷P1169 bzoj1057 这个题目跟最大全0子矩阵是类似的.正方形的话,只要把任意极大子正方形(”极大“定义见后面的”论文“)当成把某个极大子矩形去掉一块变成正方形即可,容易解决. 解法1:看 ...

  2. 【洛谷P1169】[ZJOI2007]棋盘制作

    棋盘制作 题目链接 这个题是[USACO5.3]巨大的牛棚Big Barn和玉蟾宫的结合 一道顶两道毒瘤! 题解: 首先,棋盘有两种选法: 1.任意白格(x,y) (x+y)%2=0 ,任意黑格(x, ...

  3. [洛谷P1169][题解][ZJOI2007]午餐

    这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i ...

  4. DP(悬线法)【P1169】 [ZJOI2007]棋盘制作

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...

  5. 【题解】洛谷P1169 [ZJOI2007] 棋盘制作(坐标DP+悬线法)

    次元传送门:洛谷P1169 思路 浙江省选果然不一般 用到一个从来没有听过的算法 悬线法: 所谓悬线法 就是用一条线(长度任意)在矩阵中判断这条线能到达的最左边和最右边及这条线的长度 即可得到这个矩阵 ...

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

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

  7. 洛谷P1169 [ZJOI2007]棋盘制作 悬线法 动态规划

    P1169 [ZJOI2007]棋盘制作 (逼着自己做DP 题意: 给定一个包含0,1的矩阵,求出一个面积最大的正方形矩阵和长方形矩阵,要求矩阵中相邻两个的值不同. 思路: 悬线法. 用途: 解决给定 ...

  8. 洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)

    和玉蟾宫很像,条件改成不相等就行了. 悬线法题目 洛谷 P1169  p4147  p2701  p1387 #include<cstdio> #include<algorithm& ...

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

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

随机推荐

  1. HashMap 实现原理解析

    概要 HashMap 最早出现在 JDK 1.2 中,底层基于散列算法实现.HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0.HashMap 并不保证 ...

  2. 【CuteJavaScript】Angular6入门项目(1.构建项目和创建路由)

    本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...

  3. 【重温基础】instanceof运算符

    最近开始在整理ES6/ES7/ES8/ES9的知识点(已经上传到 我的博客 上),碰到一些知识点是自己已经忘记(用得少的知识点),于是也重新复习了一遍. 这篇文章要复习的 instanceof 是我在 ...

  4. Orleans[NET Core 3.1] 学习笔记(三)( 2 )客户端配置

    客户端配置 通过一个ClientBuilder和多个补充选项类,以编程方式配置一个用于连接Silo集群并将请求发送至Grain的客户端. 客户端配置示例: var client = new Clien ...

  5. dev gridcontrol绘制页脚

    gridView.OptionsView.ShowFooter = true;//启用显示页脚 //索引为1的列 gridView.Columns[1].SummaryItem.DisplayForm ...

  6. C#线程学习笔记八:async & await入门一

    一.涉及内容 async & await是C# 5.0引入的,控制台输出所使用的$符号(拼接字符串)是C# 6.0引入的,其功能类似于string.Format()方法. 二.多线程.异步.同 ...

  7. 一起学Spring之注解和Schema方式实现AOP

    概述 在上一篇,我们了解了通过实现接口和XML配置的方式来实现AOP,在实现注解方式AOP之前,先了解一下AspectJ.AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP语法,能 ...

  8. kotlin之变量的可空与非空

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/218 kotlin之变量的可空与非空 上面一篇文章,介绍了 ...

  9. What to wear today需求分析文档

    成员: 身份 姓名 分工 组长 陶清然 负责文档编写.ppt,测试 组员 张娜 负责前端 组员 代丽芳 负责后台 组员 江雪 负责数据库 组员 伊穆兰 负责后台 小组成员在本次迭代中的贡献: 姓名 贡 ...

  10. Distributed Systems: When you should build them, and how to scale. A step-by-step guide.

    原文链接 https://medium.com/free-code-camp/distributed-systems-when-you-should-build-them-and-how-to-sca ...