玉蟾宫(悬线dp)
求最大子矩阵一般用采用悬线法 (包好用的牢底)
悬线法:
- [ 以这道题为例,我们将R称为障碍格子,将F称为非障碍格子]
我们选择任意一个非障碍格子,引出三条直线:左直 右直 上直
随后从这个点出发,分别向上 左 右延申直到遇到障碍格
我们要求上悬线尽可能高的面积, 但有可能上一层的左直线比这一层短,所以不能直接傻傻地用上*(右-左+1);
所以要让左悬线尽可能大,右悬线尽可能小
最后轮流求每个非障碍点能延伸到的最大面积
公主请欣赏代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n, m, ans;
char a[N][N];
int h[N][N], l[N][N], r[N][N];
int main(){
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
cin >> a[i][j];
h[i][j] = 1; l[i][j] = r[i][j] = j;//将悬线都初始化
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(a[i][j] == 'F' and a[i][j-1] == 'F') l[i][j] = l[i][j-1];//延伸左悬线
}
for(int j=1; j<=m; j++){
if(a[i][j] == 'F' and a[i-1][j] == 'F') h[i][j] = h[i-1][j] + 1;//延伸上悬线
}
for(int j=m; j>=1; j--){
if(a[i][j] == 'F' and a[i][j+1] == 'F') r[i][j] = r[i][j+1];//延伸右悬线
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(a[i][j] == 'F' and a[i-1][j] == 'F'){
l[i][j] = max(l[i][j], l[i-1][j]);
r[i][j] = min(r[i][j], r[i-1][j]);
}
if(a[i][j] == 'F'){
ans = max(ans, h[i][j] * (r[i][j] - l[i][j] + 1));
}
}
}
printf("%d", ans*3);
return 0;
}
玉蟾宫(悬线dp)的更多相关文章
- luogu 4147 玉蟾宫 悬线DP
Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...
- P4147 玉蟾宫(悬线法求最大子矩阵)
P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...
- BZOJ 3039: 玉蟾宫( 悬线法 )
最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...
- 【bzoj3039】玉蟾宫 悬线法
悬线法是一种更优秀的枚举方式,保证了枚举悬线的集合包含了极大子矩形所在的集合,而且由最大子矩形一定是极大子矩形的定理可知,这种枚举方式可以求出最大子矩形. 具体做法是维护矩形中每个元素对应最近的左边和 ...
- 【BZOJ】3039: 玉蟾宫 悬线法
[题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...
- bzoj3039 joyoi1939 玉蟾宫 悬线法
悬线法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- P4147 玉蟾宫 二维DP 悬线法
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- luogu 1169 [ZJOI2007]棋盘制作 悬线dp
悬线法,虽然得不到局部最优解,但是一定能得到全局最优解的算法,十分神奇~ #include <cstdio> #include <algorithm> #define N 20 ...
- BZOJ_3039_玉蟾宫_(动态规划+悬线法)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
随机推荐
- 遥感图像处理笔记之【Machine Learning CS-433 - Class Project 2 - Road Segmentation - EPFL】
遥感图像处理学习(8) 前言 遥感系列第8篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2024年1月2日 本文再编辑于2024年1月4日:附作者改进U-Net网络图片:文字补充说明 20 ...
- Django后台输出原生SQL语句
如果需要打印orm翻译后的原生sql语句,只需要在setting最后加上下面代码就行. 1 LOGGING = { 2 'version': 1, 3 'disable_existing_logger ...
- docker安装oracle数据
docker安装oracle数据库 1️⃣ 通过docker拉取并启动oracle11g(此版本目前主流),docker换源及安装mysql看Springboot创建项目及测试 - $YX$ - 博客 ...
- Google_Book_20Things.前言以及前四项学习笔记
20 THINGS I LEARNED ABOUT BROWSERS AND THE WEB Illustrated by Christoph Niemann. Written by the Goog ...
- spring声明式事务(@Transactional)开发常犯的几个错误及解决办法
spring声明式事务(@Transactional)开发常犯的几个错误及解决办法 目前JAVA的微服务项目基本都是SSM结构(即:springCloud +springMVC+Mybatis),而其 ...
- 小知识:什么叫做workaround?
技术人当遇到具体问题,能给出的各种解决方案,有一种类型叫做workaround,翻译过来通常为"应变方法"."变通方法": 其实这种方式通常是没有找到根本的解决 ...
- 域名解析迟迟不生效,刷新本地DNS的方法
ipconfig /flushdns 刷新后,再ping 发生域名解析 的指向就对了.!
- Hive中Lateral view用法
1. lateral view 简介 hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表.配合UDTF函数 ...
- 文心一言 VS 讯飞星火 VS chatgpt (197)-- 算法导论14.3 5题
五.用go语言,对区间树 T 和一个区间 i ,请修改有关区间树的过程来支持新的操作 INTERVALSEARCH-EXACTLY(T,i) ,它返回一个指向 T 中结点 x 的指针,使得 x.int ...
- UVA11573 Ocean Currents
题目链接 题目 见链接. 题解 知识点:BFS. 这道题显然用BFS,但发现洋流方向会破坏时间的有序性,但注意到洋流时间花费是 \(0\) ,因此只需要用双端队列即可,洋流方向扩展直接放队头,其他方向 ...