3039: 玉蟾宫

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit: 753  Solved: 444
[Submit][Status][Discuss]

Description

有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。
现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。
但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。

Input

第一行两个整数N,M,表示矩形土地有N行M列。
接下来N行,每行M个用空格隔开的字符'F'或'R',描述了矩形土地。

Output

输出一个整数,表示你能得到多少银子,即(3*最大'F'矩形土地面积)的值。

Sample Input

5 6
R F F F F F
F F F F F F
R R R F F F
F F F F F F
F F F F F F

Sample Output

45

HINT

对于50%的数据,1<=N,M<=200
对于100%的数据,1<=N,M<=1000

Source

Poetize4

1057: [ZJOI2007]棋盘制作

Time Limit: 20 Sec  Memory Limit: 162 MB
Submit: 2379  Solved: 1185
[Submit][Status][Discuss]

Description

国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。而我们的主人公小Q,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则。小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一。小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可能的大。不过小Q还没有决定是找一个正方形的棋盘还是一个矩形的棋盘(当然,不管哪种,棋盘必须都黑白相间,即相邻的格子不同色),所以他希望可以找到最大的正方形棋盘面积和最大的矩形棋盘面积,从而决定哪个更好一些。于是小Q找到了即将参加全国信息学竞赛的你,你能帮助他么?

Input

第一行包含两个整数N和M,分别表示矩形纸片的长和宽。接下来的N行包含一个N * M的01矩阵,表示这张矩形纸片的颜色(0表示白色,1表示黑色)。

Output

包含两行,每行包含一个整数。第一行为可以找到的最大正方形棋盘的面积,第二行为可以找到的最大矩形棋盘的面积(注意正方形和矩形是可以相交或者包含的)。

Sample Input

3 3
1 0 1
0 1 0
1 0 0

Sample Output

4
6

HINT

N, M ≤ 2000

Source

Solution

悬线法求最大子矩形    讲解

BZOJ3039玉蟾宫  就是裸的悬线法

BZOJ1057棋盘制作:

由于要求符合黑白染色的最大子矩形。 直接求显然非常麻烦,但是我们考虑对问题进行转化。

如果我们将原矩阵的黑白染色,另黑点0/1全部反转。那么我们求一个满足的最大子矩阵就相当于求一个最大的全0/1子矩阵(思考一下还是很容易想到的)

这样我们悬线法两次即可。

另一个问题就是最大子正方形。 考虑最大子正方形一定是包含在某个有效的极大子矩形中的,所以我们把所有的有效的极大子矩形中的长宽的较短边取一个最大,那么最大子正方形一定是这个长度的平方

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int N,M,a[1010][1010],l[1010][1010],r[1010][1010],h[1010][1010],ans;
char c[1];
int main()
{scanf("%d%d",&N,&M);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)scanf("%s",c),a[i][j]=c[0]=='F';for (int i=1; i<=N; i++){for (int j=1,x=0; j<=M; j++)if (a[i][j]) l[i][j]=x; else l[i][j]=0,x=j;for (int j=M,x=M+1; j>=1; j--)if (a[i][j]) r[i][j]=x; else r[i][j]=M+1,x=j;}for (int i=1; i<=M+1; i++) r[0][i]=M+1;for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (a[i][j])h[i][j]=h[i-1][j]+1,l[i][j]=max(l[i][j]+1,l[i-1][j]),r[i][j]=min(r[i][j]-1,r[i-1][j]);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (a[i][j]) ans=max(ans,(r[i][j]-l[i][j]+1)*h[i][j]);printf("%d\n",ans*3);return 0;
}

BZOJ-3039

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 2010
int N,M,a[MAXN][MAXN],l[MAXN][MAXN],r[MAXN][MAXN],h[MAXN][MAXN],ans,x;
int main()
{scanf("%d%d",&N,&M);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)scanf("%d",&a[i][j]);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if ((i+j)&1) a[i][j]^=1;for (int i=1; i<=N; i++){for (int j=1,x=0; j<=M; j++)if (a[i][j]) l[i][j]=x; else l[i][j]=0,x=j;for (int j=M,x=M+1; j>=1; j--)if (a[i][j]) r[i][j]=x; else r[i][j]=M+1,x=j;}for (int i=1; i<=M+1; i++) r[0][i]=M+1;for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (a[i][j])h[i][j]=h[i-1][j]+1,l[i][j]=max(l[i][j]+1,l[i-1][j]),r[i][j]=min(r[i][j]-1,r[i-1][j]);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (a[i][j]) ans=max(ans,(r[i][j]-l[i][j]+1)*h[i][j]),x=max(x,min((r[i][j]-l[i][j]+1),h[i][j]));memset(h,0,sizeof(h));for (int i=1; i<=N; i++){for (int j=1,x=0; j<=M; j++)if (!a[i][j]) l[i][j]=x; else l[i][j]=0,x=j;for (int j=M,x=M+1; j>=1; j--)if (!a[i][j]) r[i][j]=x; else r[i][j]=M+1,x=j;}for (int i=1; i<=M+1; i++) r[0][i]=M+1;for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (!a[i][j])h[i][j]=h[i-1][j]+1,l[i][j]=max(l[i][j]+1,l[i-1][j]),r[i][j]=min(r[i][j]-1,r[i-1][j]);for (int i=1; i<=N; i++)for (int j=1; j<=M; j++)if (!a[i][j]) ans=max(ans,(r[i][j]-l[i][j]+1)*h[i][j]),x=max(x,min((r[i][j]-l[i][j]+1),h[i][j]));printf("%d\n%d\n",x*x,ans);return 0;
}

BZOJ-1057

水题就不一一发了......

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5910280.html

【BZOJ-30391057】玉蟾宫棋盘制作 悬线法相关推荐

  1. [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵

    https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...

  2. 洛谷-P1169 棋盘制作(悬线法)

    国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 × 8 8×8 8×8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳 ...

  3. 洛谷P1169 棋盘制作(悬线法)

    题目链接:https://www.luogu.org/problemnew/show/P1169 #include<bits/stdc++.h> #define fi first #def ...

  4. 洛谷 P4147 玉蟾宫 题解【悬线dp】

    原题地址 蛤,今天正好学习一下悬线dp,写了个板子题. 用 l [ i ] [ j ] l[i][j] l[i][j]表示能延伸的最左的位置的列, r [ i ] [ j ] r[i][j] r[i] ...

  5. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  6. bzoj 1057: 棋盘制作(悬线法)

    1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 2311  Solved: 1146 [Submit][St ...

  7. BZOJ[3039]玉蟾宫 悬线法

    题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=3039 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山 ...

  8. 洛谷 P4147 玉蟾宫【悬线法/单调栈】

    题目背景 有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成 N×MN\times MN×M ...

  9. [P4147 玉蟾宫(悬线法)

    题目链接: P4147 玉蟾宫 题目大意: n ∗ m n∗m n∗m的矩阵,求最大的全 F F F矩阵面积 ∗ 3 *3 ∗3. 思路:悬线法. 参考代码: #include <bits/st ...

最新文章

  1. 什么是SAP HANA Database Procedure(数据库过程)
  2. iphone中使用第三方工具(RegexKitLite)实现正则表达式
  3. IOS scrollView 知识点
  4. C4D立体素材|旅游度假主题海报,设计点睛之笔
  5. Spring Cloud构建微服务架构—服务网关过滤器
  6. oracle请求界面,Oracle EBS如何enable 请求界面 View XML按钮
  7. springboot开发微信公众号(一)创建、查询、删除菜单(附源码)
  8. 读书笔记之财报就像一本故事书
  9. hp打印机装不上服务器系统,win10安装不了惠普打印机驱动怎么办
  10. Github上最热门的Java开源项目
  11. 系统的x86与x64是什么意思以及他们的区别?
  12. SQL 视图 简记
  13. 台式计算机用u盘给电脑安装系统,台式机用u盘装系统 电脑店给台式机装系统详细教程...
  14. android手电筒的源代码,Android,求打开手电筒最简练的代码
  15. “天下文章一大抄”的时代已经过去
  16. linux挂载img镜像文件,如何挂载.img格式的镜像
  17. 设计一个有利于A股东的配股方案
  18. java人民币大小写转换_人民币大小写转换
  19. Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  20. 怎么设计出来的网站才更好看

热门文章

  1. 2022-2028年中国XPS挤塑板行业市场全景评估及产业前景规划报告
  2. Docker使用遇到问题Got permission denied while trying to connect to the Docker daemon socket解决方案
  3. idea内Maven的全局配置
  4. Win10系统如何在防火墙里开放端口
  5. 【VS实践】VS解决方案中出现无法生成DLL文件
  6. oracle sqlserver 查看指定用户下面的表
  7. 小白给小白详解维特比算法(二)
  8. LeetCode简单题之单值二叉树
  9. LeetCode简单题之比赛中的配对次数
  10. 新一代图像AI ISP技术