【bzoj3039】玉蟾宫 悬线法
悬线法是一种更优秀的枚举方式,保证了枚举悬线的集合包含了极大子矩形所在的集合,而且由最大子矩形一定是极大子矩形的定理可知,这种枚举方式可以求出最大子矩形。
具体做法是维护矩形中每个元素对应最近的左边和右边的障碍点,再维护一个高度数组记录下每个点向上可以延伸多高,还有对应的矩形向左向右可以到达的最大宽度。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int n,m,a[maxn][maxn];char s[2];
int lpos[maxn][maxn],rpos[maxn][maxn],l[maxn][maxn],r[maxn][maxn],h[maxn][maxn];
void read_and_parse(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf("%s",s);
			if(s[0]=='F')a[i][j]=1;
		}
	for(int i=1;i<=n;i++){
		int pos=0;//初始障碍点是0
		for(int j=1;j<=m;j++){
			if(a[i][j])lpos[i][j]=pos;
			else pos=j,l[i][j]=0;//如果是障碍点,l,r 数组也要跟着初始化,避免对下面不是障碍点的递推造成影响
		}
		pos=m+1;
		for(int j=m;j>=1;j--){
			if(a[i][j])rpos[i][j]=pos;
			else pos=j,r[i][j]=m+1;
		}
	}
}
void solve(){
	int ans=0;
	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++)if(a[i][j]){
			h[i][j]=h[i-1][j]+1;
			l[i][j]=max(l[i-1][j],lpos[i][j]+1);
			r[i][j]=min(r[i-1][j],rpos[i][j]-1);
			ans=max(ans,h[i][j]*(r[i][j]-l[i][j]+1));
		}
	printf("%d\n",3*ans);
}
int main(){
	read_and_parse();
	solve();
	return 0;
}
【bzoj3039】玉蟾宫 悬线法的更多相关文章
- P4147 玉蟾宫(悬线法求最大子矩阵)
		P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ... 
- bzoj3039 joyoi1939 玉蟾宫 悬线法
		悬线法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ... 
- BZOJ 3039: 玉蟾宫( 悬线法 )
		最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ... 
- 【BZOJ】3039: 玉蟾宫 悬线法
		[题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ... 
- luogu 4147 玉蟾宫 悬线DP
		Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ... 
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作       悬线法
		3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ... 
- 2018.09.29 bzoj3039: 玉蟾宫(悬线法)
		传送门 悬线法的板子题. 悬线法只需要保存当期点向下最多多少个,把这个当成一条线,再处理出线绷直之后最多能向左右延展多少就行了. 代码: #include<bits/stdc++.h> # ... 
- BZOJ_3039_玉蟾宫_(动态规划+悬线法)
		描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ... 
- P4147 玉蟾宫   二维DP 悬线法
		题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ... 
随机推荐
- Mysql抓包工具 - MySQL Sniffer  使用小结 (含带general_log日志)
			在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ... 
- Visual studio2015 编译时提示“GenerateResource”任务意外失败。
			今天弄了一个winfrom程序,狗血,一直报错,在另一台电脑上就不报错. 错误如下图 其实这样也能运行,但就是代码改之后,没有办法调试.搜了很久,发现了一种解决办法,完美解决. 最终成功了. 
- linux-RPM安装
			vh可写可不写 
- poj1426   Find The Multiple(c语言巧解)
			Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36335 Accepted: 151 ... 
- html转js字符串拼接
			https://www.bejson.com/convert/html_js/ html转js字符串拼接 
- 实验二                               合作:王宏财  http://www.cnblogs.com/wanghongcai/
			package 四则运算; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JOptionPane; ... 
- C# 中颜色和名称样式对照表
			WPF中的画刷也一样适用 System.Windows.Media.Brushes.名称 (如:System.Windows.Media.Brushes.AliceBlue) :first-child ... 
- CI框架--数据库Query_Builder中的方法
			下面是DB_Query_Builder.php中,各个方法的声明: 选择字段(select) public function select($select = '*', $escape = NULL) ... 
- Java的JDK下Hashtable与HashMap的区别
			时间角度: Hashtable * @since JDK1.0 ; HashMap* @since 1.2 基类与接口角度: public class Hashtable<K,V> e ... 
- Docker 执行nginx以及简单进入container
			1. docker run -d --name mynginx nginx 运行起来nginx镜像之后 2. docker exec -ti mynginx /bin/bash 能够进入操作界面 发现 ... 
