P4147 玉蟾宫 题解
简要题意:
求最大 \(0\) 矩阵。(将字符转化为数字)
本题是模板题,可以用来爆踩。???
悬线法 来了!

其中绿色是 \(0\),红色是 \(1\).
下面以这个图为例讲一下算法流程。
我们首先求出,以每个格子为最下面,往上堆积的最长的 \(0\) 条。
则所有格子的值为:
0 0 1 0
0 1 2 1
1 2 3 2
0 0 0 0
下面,对每一行,求以这一行为底的最大矩阵。
第一行:只能以 \(a_{1,3}\) 为底,无法往左右扩展,此时答案为 \(1 \times (3-3+1) = 1\).
第二行:对于 \(a_{2,2}\),可以往左扩展至 \(2,2\),往右扩展至 \(2,4\),此时答案为 \(1 \times (4-2+1) = 3\).
而 \(a_{4,2}\) 同理。
但 \(a_{3,3}\) 往上可以扩展 \(1\) 格,左右不得扩展,因此答案为 \(2 \times (3-3+1) = 2\).
所以整个第二行的答案为 \(\max(3,2,3) = 3\).
第三行:
对于 \(a_{3,1}\) ,左右扩展 \(4\) 格,往上只有 \(1\) 格,答案为 \(4\).
对于 \(a_{3,2}\) ,左右扩展 \(3\) 格,往上只有 \(2\) 格,答案为 \(6\).
而 \(a_{3,3}\) ,\(a_{4,4}\) 同。
所以第三行的答案为 \(\max(4,6,6,6) = 6\).
第四行没有绿格,所以答案为 \(0\).
综上,答案为 \(\max(1,3,6,0) = 6\).
大家应该都懂了吧!
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+1;
inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int n,m,a[N][N],h[N][N];
int l[N][N],r[N][N],ans=0;
int main(){
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {
char c; cin>>c;
a[i][j]=(c=='F')?0:1;
// l[i][j]=r[i][j]=j; h[i][j]=1;
} for(int j=1;j<=m;j++) r[0][j]=m+1;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) h[i][j]=(!a[i][j])?(h[i-1][j]+1):0; //往上扩展
int t=0;
for(int j=1;j<=m;j++)
if(!a[i][j]) l[i][j]=max(l[i-1][j],t);
else l[i][j]=0,t=j; //往左扩展
t=m+1; for(int j=m;j;j--)
if(!a[i][j]) r[i][j]=min(r[i-1][j],t);
else r[i][j]=m+1,t=j; //往右扩展
for(int j=1;j<=m;j++) ans=max(ans,(r[i][j]-l[i][j]-1)*h[i][j]);
} printf("%d\n",ans*3); //别忘了*3
return 0;
}
P4147 玉蟾宫 题解的更多相关文章
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
- 悬线法 || BZOJ3039: 玉蟾宫 || Luogu P4147 玉蟾宫
题面: P4147 玉蟾宫 题解:过于板子举报了 #include<cstdio> #include<cstring> #include<iostream> #de ...
- P4147 玉蟾宫--单调栈
P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...
- P4147 玉蟾宫
P4147 玉蟾宫 给定一个 \(N * M\) 的矩阵 求最大的全为 \(F\) 的子矩阵 Solution 悬线法 限制条件为转移来的和现在的都为 \(F\) Code #include<i ...
- P4147 玉蟾宫(悬线法求最大子矩阵)
P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...
- [Luogu P4147] 玉蟾宫 (网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P4147 Solution 裸的求极大子矩阵 感谢wzj dalao的教学 首先,有一个很显然但很重要的结论 ...
- P4147 玉蟾宫 二维DP 悬线法
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- dp--悬线dp P4147 玉蟾宫
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- 洛谷P4147 玉蟾宫 单调栈/悬线法
正解:单调栈/悬线法 解题报告: ummm这题我当初做的时候一点思路也没有只会暴力出奇迹:D(啊听说暴力好像能水过去呢,,, 然后当初是看的题解,然后学了下悬线法 然后就忘了:D 然后我现在看发现看不 ...
随机推荐
- Java-Springboot-集成spring-security简单示例(Version-springboot-2-1-3-RELEASE
使用Idea的Spring Initializr或者SpringBoot官网下载quickstart 添加依赖 1234 <dependency><groupId>org.sp ...
- C#开发BIMFACE系列30 服务端API之模型对比1:发起模型对比
系列目录 [已更新最新开发文章,点击查看详细] 在实际项目中,由于需求变更经常需要对模型文件进行修改.为了便于用户了解模型在修改前后发生的变化,BIMFACE提供了模型在线对比功能,可以利用在 ...
- Ubuntu18.04LTS安装docker报错:Command 'lsb_release' not found
Ubuntu18.04LTS安装docker在执行sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/ ...
- 用table类型布局一个新闻网页
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- 纯JS实现KeyboardNav(学习笔记)一
纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南 ...
- LeetCode 162.Find Peak Element(M)(P)
题目: A peak element is an element that is greater than its neighbors. Given an input array where num[ ...
- 一键制作镜像并发布到k8s
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- SpringBoot图文教程14—SpringBoot集成EasyExcel「上」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- 必备技能七、Vuex
这段时间一直在用vue写项目,vuex在项目中也会依葫芦画瓢使用,但是总有一种朦朦胧胧的感觉.于是决定彻底搞懂它. 看了一下午的官方文档,以及资料,才发现vuex so easy! 作为一个圈子中的人 ...
- javascript中this指向的问题
javascript中this只有函数执行时候才能确定到底指向谁,实际this最终指向是那个调用它的对象. 1,匿名函数中的this——window function foo(){ var lastN ...