[Luogu P4147] 玉蟾宫 (网格DP)
题面
传送门:https://www.luogu.org/problemnew/show/P4147


Solution
裸的求极大子矩阵
感谢wzj dalao的教学
首先,有一个很显然但很重要的结论,那就是求极大子矩阵肯定要贴着边或一个障碍点,否则就会浪费
根据这个定理,我们可以考虑一种做法
我们可以枚举每一个可放置的点
我们可以很轻松的得知它与它左边的障碍点(或边界)的距离,也可以得知它上面与下面能扩展到哪里(即无障碍点最多能到哪里)
那这个点能扩出的长方形的最大面积就是它左边的上面与下面能扩展出来的距离的最小值*它到左边障碍点的距离
如图:
[图待补充]
然后取一个最大的面积就好
Code
1 //Luogu P4147 玉蟾宫
2 //May,9th,2018
3 //悬线法旋转90°求极大子矩阵
4 #include<iostream>
5 #include<cstdio>
6 #include<cstring>
7 using namespace std;
8 const int N=1000+10;
9 const int inf=0x3f3f3f3f;
10 int up[N][N],down[N][N],a[N][N],n,m;
11 int main()
12 {
13 scanf("%d%d",&n,&m);
14 char c[2];
15 memset(a,0x80,sizeof a);
16 for(int i=1;i<=n;i++)
17 for(int j=1;j<=m;j++)
18 {
19 scanf("%s",c+1);
20 if(c[1]=='F')
21 a[i][j]=0;
22 }
23
24 for(int i=1;i<=n;i++)
25 for(int j=1;j<=m;j++)
26 if(a[i][j]==0 and a[i-1][j]==0)
27 up[i][j]=up[i-1][j]+1;
28 for(int i=n;i>=1;i--)
29 for(int j=1;j<=m;j++)
30 if(a[i][j]==0 and a[i+1][j]==0)
31 down[i][j]=down[i+1][j]+1;
32
33 int ans=0,u=inf,d=inf,w=0;
34 for(int i=1;i<=n;i++)
35 {
36 u=d=inf;
37 w=0;
38 for(int j=1;j<=m;j++)
39 if(a[i][j]!=0)
40 {
41 u=d=inf;
42 w=0;
43 }
44 else
45 {
46 u=min(u,up[i][j]);
47 d=min(d,down[i][j]);
48 ans=max(ans,(++w)*(u+d+1));
49 }
50 }
51 printf("%d",ans*3);
52 return 0;
53 }
正解(C++)
[Luogu P4147] 玉蟾宫 (网格DP)的更多相关文章
- 悬线法 || BZOJ3039: 玉蟾宫 || Luogu P4147 玉蟾宫
题面: P4147 玉蟾宫 题解:过于板子举报了 #include<cstdio> #include<cstring> #include<iostream> #de ...
- Luogu P4147 玉蟾宫
题目 就是全0子矩阵. 先预处理每个点上面有多少个连续的0(包括自己). 然后我们枚举下边界(1-n). 我们开一个单调栈,记录一个上界递增的矩形集合. 如果我们扫到了一个比当前栈顶要矮的矩形,那么我 ...
- P4147 玉蟾宫--单调栈
P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...
- P4147 玉蟾宫
P4147 玉蟾宫 给定一个 \(N * M\) 的矩阵 求最大的全为 \(F\) 的子矩阵 Solution 悬线法 限制条件为转移来的和现在的都为 \(F\) Code #include<i ...
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
- P4147 玉蟾宫(悬线法求最大子矩阵)
P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...
- P4147 玉蟾宫 二维DP 悬线法
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- dp--悬线dp P4147 玉蟾宫
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- [Luogu P1006]传纸条 (网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1006 Solution 挺显然但需要一定理解的网络(应该是那么叫吧)DP 首先有一个显然但重要的结论要发 ...
随机推荐
- Tomcat 8.5安装
安装 打开Tomcat官网:http://tomcat.apache.org/,下载tar.gz压缩文件,下载后文件名是apache-tomcat- 8.5.23.tar.gz.使用root用户安装, ...
- SolrJ使用
1 //向solr索引库中添加索引 2 public void addDoc() throws Exception { 3 //创建solr客户端的对象 4 HttpSolrClient client ...
- SpringBoot2.3中@Async实现异步
启动加上@EnableAsync ,需要执行异步方法上加入@Async. 在方法上加上@Async之后 底层使用多线程技术. 不使用异步 先关代码: package com.yiyang.myfirs ...
- Boost 信号与槽,获取槽函数返回值,使用占位参数传递信号携带的参数
test1: 展示了, 1 信号与槽的基本使用, 2 要获取槽函数的返回值时的注意事项 #if 1 /* 参考blog https://www.cnblogs.com/jiayayao/p/62 ...
- 07 Sublime Text3常用快捷键
通用常用类(General) ↑↓←→:上下左右移动光标,注意不是不是 KJHL ! Alt:调出菜单 Ctrl + Shift + P:调出命令板(Command Palette) Ctrl + ` ...
- Matlab2016b安装流程
来源:https://jingyan.baidu.com/article/59703552da12ab8fc007402b.html Matlab2016b安装教程 听语音 原创 | 浏览:34338 ...
- DevOps元素周期表——1号元素 Gitlab
DevOps元素周期表--1号元素 Gitlab GitLab 是由 GitLab Inc.开发,一款基于 Git 的完全集成的软件开发平台(fully integrated software dev ...
- 收到DE2+LCM+ D5M套件,拾回DE2,努力,奋进!
今天收到磐转寄的查无此人的DE2二手开发套件,准备用它来做科研验证!今天天是快学的第一天,参加电子设计竞赛会议.开集体会!
- MeteoInfoLab脚本示例:SeaWiFS HDF Grid数据
SeaWiFS HDF Grid数据读取,特别是涉及到了文件的众多属性数据的读取,数据取对数后绘图.脚本程序: #Add data file f = addfile('D:/Temp/hdf/S199 ...
- 远程IO
远程io 远程io ZLAN6842,ZLAN6844是8路远程O控制器.含有8路DI.8路DO,8路AI输入.其中DI支持干节点和湿节点,带光耦隔离:DO为继电器输出,具有5A 250VAC或5A ...