题目描述

这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。

现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'F'并且面积最大。

但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为S,它们每人给你S两银子。

输入输出格式

输入格式:

第一行两个整数N,M,表示矩形土地有N行M列。

接下来N行,每行M个用空格隔开的字符'F'或'R',描述了矩形土地。

输出格式:

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

输入输出样例

输入样例#1:

 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

输出样例#1:

 45

\(Solution:\)

一道傻不拉几的求最大矩形面积题qwq

首先处理一个 p 数组,表示向上可拓展多少高度,是 “ F ” 就从上面那个转移过来,是 “ R ” 就等于 0 。然后枚举每一行,对于每一行求一个最大矩形面积

重点来了,怎么求最大矩形面积?请听下回分解

开一个栈,用来记录单调上升的矩阵,接下来的矩阵如果高度大于 top ,就加进去;如果小于,就把栈弹到大于为止,即把栈中高于当前矩阵的矩阵弹掉并处理一下,并且每一次弹栈时都记录一下答案。

如果有这么一个图:

首先一直加,不需要记录答案,直到第5个矩阵:

那么就把第3,4号矩阵弹掉,并相应地把2号矩阵的宽度改掉,即改成这种样子:

在过程中开一个指针leng,表示你弹掉的矩阵的总长度,在每弹一个时计算一下答案:\(leng * l[top].hi\) 。比如弹第三个时:

此时 leng=2 ,\(l[top].hi\) 为第三个矩阵的高度,计算的是蓝色区域的面积。

最后把第4号的宽度也加进去,所以栈中有两个元素,第一号宽度为 1 ,第二个为 4 。

跑完时一定要记得把栈清空,弹栈的程序一样,也要计算答案。

具体请配合代码食用:

#include<bits/stdc++.h>
using namespace std;
inline int read(){int f=1,w=0;char c=0;while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)) w=w*10+(c^48),c=getchar();return f*w;
}
struct line{int le,hi;
}l[1010];//栈
int T,n,m,p[1010][1010],s[1010],ans;
int check(int q){int tp=1,res=p[q][1];l[1].hi=res,l[1].le=1;for(int i=2;i<=m;i++){if(p[q][i]>=l[tp].hi){l[++tp].le=1;l[tp].hi=p[q][i];}//高度大于,直接加栈else{int leng=0;while(l[tp].hi>p[q][i]){leng+=l[tp].le;res=max(res,leng*l[tp].hi);//弹的时候记录一下答案tp--;}l[++tp].le=leng+1;l[tp].hi=p[q][i];//入栈}}int leng=0;while(tp){leng+=l[tp].le;res=max(res,leng*l[tp].hi);tp--;}//弹栈并计算return res;
}
int main(){ans=0;n=read(),m=read();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c;cin>>c;if(c=='F') p[i][j]=p[i-1][j]+1;else p[i][j]=0;}//预处理P数组for(int i=1;i<=n;i++)//枚举行号ans=max(ans,check(i));printf("%d\n",ans*3);return 0;
}

就酱qwq

转载于:https://www.cnblogs.com/ajy-shi-cj-zui-cai/p/10386695.html

洛谷P4147玉某宫(最大矩阵好题)相关推荐

  1. 洛谷 P4147 玉蟾宫 P1169 [ZJOI2007]棋盘制作(求最大子矩阵)

    题目: P4147 玉蟾宫: https://www.luogu.org/problemnew/show/P4147  P1169 [ZJOI2007]棋盘制作: https://www.luogu. ...

  2. 洛谷P4147 玉蟾宫(单调栈解决)

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

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

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

  4. 刷题记录:洛谷P4147玉蟾宫

    传送门:洛谷 题目描述: 这片土地被分成 N × M N\times M N×M 个格子,每个格子里写着 'R' 或者 'F',R 代表这块土地被赐予了 rainbow,F 代表这块土地被赐予了 fr ...

  5. 洛谷 P4147 玉蟾宫

    这好像是一道悬线法的题目,但是我不会,只能用单调栈水过了 我们将ai,ja_{i,j}ai,j​定义为从(i,j)(i,j)(i,j)出发向上(坐标减小)可以达到的最长的.没有R的路径 比如说样例 5 ...

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

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

  7. 信息学奥赛一本通 1967:【14NOIP普及组】螺旋矩阵 | 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵

    [题目链接] ybt 1967:[14NOIP普及组]螺旋矩阵 洛谷 P2239 [NOIP2014 普及组] 螺旋矩阵 类似考题: 洛谷 P1014 [NOIP1999 普及组] Cantor 表 ...

  8. python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等

    NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...

  9. 玉蟾宫【洛谷P4147】

    题目描述 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 这片土地被分成NM个格子,每个格子里写着'R'或者'F',R代表这 ...

最新文章

  1. php中id如何与删除关联,ThinkPHP查询语句与关联查询用法实例
  2. 【react】 使用react 脚手架 创建项目
  3. fdisk 创建和维护磁盘分区命令(MBR分区方案)
  4. 爬虫python代码网易云_超简单的Python爬虫之网易云音乐的下载
  5. 批量自动下单(京东)
  6. mysql 内连接查询三表数据_数据库三表连接查询怎么做
  7. 51单片机c语言轻松入门,单片机的C语言轻松入门资料
  8. 泰迪杯特等奖思路(教育平台线上课程用户行为分析(含数据可视化处理))-思路篇
  9. 零跑C01/S01/C11/T03维修手册电路图培训手册用户手册技术资料
  10. 结构仿真实验,Midas多跨超静定连续梁手算电算分析
  11. 解决-win10软件默认安装路径为C盘——修改注册表
  12. realme 制作一键root
  13. 花房集团CEO于丹内部信:上市即暴富年代已一去不复返
  14. 如何在 SAP 轻松访问屏幕上以不同的布局创建不同的启动板
  15. Ubuntu强制修改root密码
  16. 支付宝 AR 红包技术探讨及如何在下一波技术浪潮中畅泳
  17. 不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?
  18. 数据分析《令人心动的offer2》—你心动了吗?
  19. 学习canvas(一):用线画出正方形和三角形
  20. java AES加密 前端CryptoJS AES解密

热门文章

  1. 图解 MySQL 索引:B-树、B+树,终于搞清楚了!
  2. Java中有哪些无锁技术来解决并发问题?如何使用?
  3. 记一次内存泄漏问题的排查经历
  4. 今日头条 Go 建千亿级微服务的实践
  5. 如何日赚100万美金?(附“标准”答案)
  6. 云VS本地,一言难尽的ERP
  7. consul 命令行参数
  8. FetchType.LAZY和FetchType.EAGER什么区别?(懒加载和急加载的理解)
  9. python中的scaler_Python preprocessing.MaxAbsScaler方法代码示例
  10. c2000 pro 固件更新_一加7Pro系统更新新增屏幕侧滑返回手势