bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]
Description
Input
Output
Sample Input
1 0 1
0 1 0
1 0 0
Sample Output
6
HINT
N, M ≤ 2000
/**************************************************************
Problem: 1057
User: ZYBGMZL
Language: C++
Result: Accepted
Time:2676 ms
Memory:52328 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define dbg(x) cout<<#x<<" = "<<x<<endl const int maxn=; int n,m;
bool a[maxn][maxn];
int dP[maxn][maxn];
int Dp1[maxn][maxn],Dp2[maxn][maxn]; void DP1(){
int ans=;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(a[i][j]==a[i-][j]&&a[i][j]==a[i-][j-]&&a[i][j]==a[i][j-]){
dP[i][j]=min(dP[i-][j],min(dP[i-][j-],dP[i][j-]))+;
ans=max(ans,dP[i][j]);
}
else
dP[i][j]=;
printf("%d\n",ans*ans);
} void DP2(){
int ans=;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
Dp1[i][j]=Dp2[i][j]=;
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(a[i][j]==a[i-][j])
Dp1[i][j]=Dp1[i-][j]+;
for(int i=n-;i>=;i--)
for(int j=;j<m;j++)
if(a[i][j]==a[i+][j])
Dp2[i][j]=Dp2[i+][j]+;
for(int i=;i<n;i++){
int mx1=Dp1[i][],mx2=Dp2[i][],ml=;
for(int j=;j<m;j++){
ans=max(ans,(j-ml+)*(mx1+mx2-));
if(j==m-) break;
if(a[i][j]!=a[i][j+]){
ml=j+;
mx1=Dp1[i][j+];
mx2=Dp2[i][j+];
}
else{
mx1=min(mx1,Dp1[i][j+]);
mx2=min(mx2,Dp2[i][j+]);
}
}
}
printf("%d\n",ans);
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)
for(int j=;j<m;j++){
scanf("%d",&a[i][j]);
a[i][j]^=(i^j)&;
}
DP1(); DP2();
return ;
}
bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]的更多相关文章
- [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]
[luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...
- 【BZOJ1057】[ZJOI2007] 棋盘制作(单调栈的运用)
点此看题面 大致题意: 给你一个\(N*M\)的\(01\)矩阵,要求你分别求出最大的\(01\)相间的正方形和矩形(矩形也可以是正方形),并输出其面积. 题解 这题第一眼看去没什么思路,仔细想想,能 ...
- 【BZOJ】1057: [ZJOI2007]棋盘制作(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=1057 同某一题差不多?记不清是哪题了.. 就是每一行进行单调栈维护递增的高度,在进栈和出栈维护一下长 ...
- Luogu 1169 [ZJOI2007]棋盘制作 - 动态规划+单调栈
Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大 ...
- [luoguP1169] [ZJOI2007]棋盘制作(单调栈)
传送门 和玉蟾宫差不多 ——代码 #include <cstdio> #include <iostream> using namespace std; ; int n, m, ...
- luogu 1169 棋盘制作(单调栈/悬线)
luogu 1169 棋盘制作(单调栈/悬线) 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应 ...
- BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1848 Solved: 936 [Submit][Sta ...
- 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)) ...
- BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3248 Solved: 1636 [Submit][St ...
随机推荐
- 项目实战-Gulp使用
引言 在工作中,经常会遇到要把文件合并和压缩等操作,我经历过下面的演进过程: 使用ajaxmin工具手动合并和压缩 使用Grunt合并和压缩 使用Gulp合并和压缩 这里不探讨Grunt和Gulp的优 ...
- java.lang.SecurityException: class "javax.servlet.ServletRegistration"'s signer information does not match signer information of other classes in the same package
报错信息: 报错截图: 解决方案: 因为本人是sbt项目,所以添加一下依赖之后解决: 如果是maven项目的话,添加依赖到pom文件中然后在重新build,之后就可以了
- 关于SQL中 =:的含义
一个很恶臭的例子来说明 =: 在sql语句中是做什么用的 int number= 114514: //众所周知野兽先辈的咆哮(世界级美声)是一串数字 var strSql = "select ...
- YIi2中checkboxOptions前选框的用法
这是checkboxOptions前选框的用法 use yii\grid\GridView; $this->registerJs(" $('#selection_all').click ...
- [NOIP模拟测试10]辣鸡(ljh) 题解
首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$. 然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可. 注意考虑边界情况是否能多两个,以及角对角的情况. 另外,排 ...
- TeleportArea可瞬移的目标位置
TeleportArea.png 1.可以自定义mesh ,想要什么区域就可以设置什么区域的mesh网格.2.Collider 组件必须有,否则无法进行位置移动,它用来检测激光笔是否打到该区域.3.M ...
- 浅谈学习selenium的一些知识点的总结
学习自动化测试,先得学习一门语言.自动化对语言要求掌握的程度不深,但必须得会基本的入门语法. 我学习的是python2,简单,易懂,上手快. 每天敲就是了. 我的学习路径是: 先学习一段时间pytho ...
- Linux/UNIX上安装Mysql
接下来我们在 Centos 系统下使用 yum 命令安装 MySql: 检测系统是否自带安装 mysql: rpm -qa | grep mysql 如果你系统有安装,那可以选择进行卸载: rpm - ...
- Installing GCC 简单方法
Installing GCC This page is intended to offer guidance to avoid some common problems when installing ...
- 安卓apk反编译、修改、重新打包、签名全过程
首先明确,反编译别人apk是一件不厚道的事情.代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的.这也说明,代码混淆是非常重要的.本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么 ...