洛谷 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大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...
随机推荐
- input表单元素的默认padding不一致问题
最近做的项目,发现一堆问题,input type=“text”和type=“button” (1)在无文字的时候高度是一致的,分别写入相同大小的文字type=“button”高度>type=“t ...
- 棋盘覆盖问题 (粉书 P230 【递归】** )
转载自:http://blog.csdn.net/akof1314/article/details/5423608 (赞) 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不 ...
- Gym - 100676E —— 基础题
题目链接:https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1490453767 题解: 这种方法大概跟离散化扯上点关系:首 ...
- Windows Power Shell
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能. 它引入了许多非常有用的新概念,从而进一步扩展了您在 W ...
- html5--select与HTML5新增的datalist元素
html5--select与HTML5新增的datalist元素 学习要点 掌握select元素与datalist元素的使用 select元素 用来建立一个下拉菜单选项列表 不仅可以在表单中使用,还可 ...
- HDU3440 House Man (差分约束)
In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop to housetop. To ...
- TX2 刷机过程
1.拿到板子,上电 (1)输入 ls (2)进入NVIDIA-INSTALLER/ (3)再sudo ./installer.sh 账户和密码都是:nvidia (4)sudo reboot 参考博客 ...
- poj1236学校网络——连通块
题目:http://poj.org/problem?id=1236 通过传输文件的特点可以看出要先求强联通分量,缩点: 问题1:即缩点后入度为0的点,从它们开始传文件可以传给所有学校: 问题2:对于所 ...
- kafka之三:kafka java 生产消费程序demo示例
kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kafka的安装请参考官方文档. 首先我们需要新建一个maven项目,然后在 ...
- JavaScript-Tool-富文本:Simditor
ylbtech-JavaScript-Tool-富文本:Simditor 1.返回顶部 1. 2. 2.返回顶部 1. Simditor 是团队协作工具 Tower 使用的富文本编辑器. 相比传统的编 ...