洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作
这个题目跟最大全0子矩阵是类似的。正方形的话,只要把任意极大子正方形(”极大“定义见后面的”论文“)当成把某个极大子矩形去掉一块变成正方形即可,容易解决。
解法1:看论文里面的“算法2“(那个是最大全0子矩阵方法,改一下就可以用在此题)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int n,m;
int a[][];
int lp[][],rp[][];
int lx[][],rx[][];
int hei[][];
int an1,an2;
int calc(int x,int y)
{
return min(x,y)*min(x,y);
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=;i<=n;++i)
{
for(j=;j<=m;++j)
{
scanf("%d",&a[i][j]);
}
}
for(i=;i<=n;++i)
{
lx[i][]=;
for(j=;j<=m;++j)
lx[i][j]=(a[i][j]==a[i][j-])?j:lx[i][j-];
rx[i][m]=m;
for(j=m-;j>=;--j)
rx[i][j]=(a[i][j]==a[i][j+])?j:rx[i][j+];
}
for(i=;i<=n;++i)
{
for(j=;j<=m;++j)
{
if(i!=&&a[i][j]!=a[i-][j])
{
hei[i][j]=hei[i-][j]+;
lp[i][j]=max(lp[i-][j],lx[i][j]);
rp[i][j]=min(rp[i-][j],rx[i][j]);
}
else
{
hei[i][j]=;
lp[i][j]=lx[i][j];
rp[i][j]=rx[i][j];
}
//printf("1t%d %d %d %d %d\n",i,j,hei[i][j],lp[i][j],rp[i][j]);
an1=max(an1,hei[i][j]*(rp[i][j]-lp[i][j]+));
an2=max(an2,calc(hei[i][j],rp[i][j]-lp[i][j]+));
}
}
printf("%d\n",an2);
printf("%d\n",an1);
return ;
}
解法2:
其实最大全0子矩阵还有一种做法:
枚举每一行作为子矩阵的下底部,求出每一列向上最多扩展几行,然后直接用lightoj1083的做法求解此时的最大子矩阵,取所有方案最大值即可
改一下也可以用在此题
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int st[],r[],l[],len;
int an1,an2;
int n,m;
int calc(int x,int y)
{
return min(x,y)*min(x,y);
}
void solve(int *d,int m)
{
int i;
len=;
for(i=;i<=m;++i)
{
while(len>&&d[st[len]]>=d[i]) r[st[len--]]=i-;
l[i]=st[len];
st[++len]=i;
}
while(len>) r[st[len--]]=m;
for(i=;i<=m;++i)
{
an1=max(an1,d[i]*(r[i]-l[i]));
an2=max(an2,calc(d[i],r[i]-l[i]));
}
}
int a[][],hei[][];
int main()
{
int i,j,k;
scanf("%d%d",&n,&m);
for(i=;i<=n;++i)
{
for(j=;j<=m;++j)
{
scanf("%d",&a[i][j]);
hei[i][j]=(i==||a[i][j]==a[i-][j])?:hei[i-][j]+;
}
}
for(i=;i<=n;++i)
{
for(j=;j<=m;j=k+)
{
k=j;
while(k+<=m&&a[i][k+]!=a[i][k]) ++k;
//printf("1t%d %d %d\n",i,j,k);
solve(hei[i]+j-,k-j+);
}
}
printf("%d\n",an2);
printf("%d\n",an1);
return ;
}
洛谷 P1169||bzoj1057 [ZJOI2007]棋盘制作的更多相关文章
- 【洛谷P1169】[ZJOI2007]棋盘制作
棋盘制作 题目链接 这个题是[USACO5.3]巨大的牛棚Big Barn和玉蟾宫的结合 一道顶两道毒瘤! 题解: 首先,棋盘有两种选法: 1.任意白格(x,y) (x+y)%2=0 ,任意黑格(x, ...
- [洛谷P1169][题解][ZJOI2007]棋盘制作
我不是题目的说 这道题运用了一种很巧妙的DP方式:悬线法 如图,蓝色为悬线,黄色为向两边延伸的长度 那么显然,最大子矩形的宽一定是这些黄线中最小的(证明从略) 所以我们可以维护三个数组: Up[i][ ...
- BZOJ1057 [ZJOI2007]棋盘制作(极大化思想)
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1848 Solved: 936 [Submit][Sta ...
- BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3248 Solved: 1636 [Submit][St ...
- DP(悬线法)【P1169】 [ZJOI2007]棋盘制作
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...
- BZOJ1057[ZJOI2007]棋盘制作 [单调栈]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
- BZOJ1057 [ZJOI2007]棋盘制作
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...
- 【单调栈 动态规划】bzoj1057: [ZJOI2007]棋盘制作
好像还有个名字叫做“极大化”? Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的 ...
- bzoj1057: [ZJOI2007]棋盘制作 [dp][单调栈]
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...
随机推荐
- HDU4372 Count the Buildings —— 组合数 + 第一类斯特林数
题目链接:https://vjudge.net/problem/HDU-4372 Count the Buildings Time Limit: 2000/1000 MS (Java/Others) ...
- Gym - 100676E —— 基础题
题目链接:https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1490453767 题解: 这种方法大概跟离散化扯上点关系:首 ...
- haproxy参数解析
HAProxy工作于隧道模式,其仅检查每一个连接的第一个请求, 1. option abortonclose #当服务器负载过高时,将自动关闭队列中处理时间较长的连接请求 2. option http ...
- 编译Thrift
按照 https://syslint.com/blog/tutorial/how-to-install-apache-thrift-on-ubuntu-14-04/ 进行, 编译时出现错误 make[ ...
- IOS微信禁用分享跳转页面返回BUG修复
fresh(); function fresh() { let isPageHide = false; window.addEventListener('pageshow', function () ...
- 机器学习 : 高斯混合模型及EM算法
Mixtures of Gaussian 这一讲,我们讨论利用EM (Expectation-Maximization)做概率密度的估计.假设我们有一组训练样本x(1),x(2),...x(m),因为 ...
- 「LOJ#10034」「一本通 2.1 例 2」图书管理 (map
题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. 该系统需 ...
- 「NOIP2002」「Codevs1099」 字串变换(BFS
1099 字串变换 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知有两个字串 $A$, ...
- Battle Ships(复习泛化物品**)
传送门Battle Ships Time Limit: 2 Seconds Memory Limit: 65536 KB Battle Ships is a new game which i ...
- lsyncd实时同步搭建指南——取代rsync+inotify
1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的 ...