洛谷 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大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...
 
随机推荐
- java HttpClient GET请求
			
HttpClient GET请求小实例,先简单记录下. package com.httpclientget; import java.io.IOException; import org.apache ...
 - html5--3.4 input元素(3)
			
html5--3.4 input元素(3) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...
 - php排序方法之选择排序
			
//选择排序法 $arr = array(3,55,45,2,67,76,6.7,-65,85,4); function selectSort($arr){ for ( $i=0; $i<cou ...
 - 详细的解说public,protected,Default和private的权限问题
			
详细的解说public,protected,Default和private的权限问题 让人更好的了解public,protected,Default和private他们之间的权限问题,我会做一个直观的 ...
 - java推荐书籍及下载
			
前言 一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书籍,给初学者或者想深入的朋友一些建议,帮助成长.推荐的的都是我自己读过,也会推荐一些朋友读过并且口碑不错的书籍.以下的 ...
 - python 基础之第八天--字典相关
			
zx #####################创建字典###################################### In [11]: dict([('name','bob'),('a ...
 - 「NOI1999」「LuoguP1731」生日蛋糕(爆搜剪枝
			
题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱 ...
 - JavaScript-Tool-导向:jquery.steps-un
			
ylbtech-JavaScript-Tool-导向:jquery.steps 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. http://www.jqu ...
 - css3 position:sticky
			
最近在写一个小程序,项目中遇到一个需求:页面滚动到tab切换菜单时,菜单fixed到页面顶部: 实现方法: 使用小程序的onPageScroll事件,滚动到指定位置添加fixed样式: bug1:获取 ...
 - 想要删除table的某一行的js写法
			
<tr><td onclick="del_tr(this)" >删除</td></tr> // 删除一行 function del_ ...