【专题】矩形和正方形的最大面积

一.矩形的最大面积——单调栈

(1)例题

P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

(2)讲解(摘自题解)

问题转化:

  • n行m列土地,求最大矩形面积,我们把问题拆分成n个子问题来解决.

  • 对于每一行,依次记录每行向上一直是F土地的可延伸的最大距离,记为f(i,j).

    1. 当前元素(i,j)为F,则f(i,j)=f(i-1,j)+1.
    2. 当前元素(i,j)为R,则f(i,j)=0.
  • 我们记录这个数组有什么用呢?这就可以转化为单调栈维护的问题了.

具体思路:

  • 对于每一个子问题,我们维护一个单调递增的单调栈.我们定义一个结构体(其中记录的两个元素分别是当前行第j个矩形的f值,以及它在当前已加入栈中矩形高度的排名).

  • 我们考虑当前加入第k个矩形的情况.

    1. 当前矩形高度大于栈顶,直接加入即可,因为没有比它大的元素,那么他的排名为1.

    2. 当前矩形高度小于栈顶,则不断取出栈顶,直到栈为空或者栈顶矩形的高度比当前矩形小.在出栈过程中,我们累计被弹出的矩形的宽度之和,并且每弹出一个矩形,就用它的高度乘上累计的排名(是累计,因为在它入栈后还有比它大的元素入栈)来更新答案.

    3. 这样为什么是对的呢?这是因为:如果当前要加入矩形的f值(即当前矩形的高度比上一个小),那么该矩形想利用前面的矩形一起构成一个大矩形是,这块矩形的高度不可能超过该矩形自己的高度,则记录前面元素的高度就没有用处了.而宽度还有用处(因为当前矩形高度较小,与比它高的矩形的宽度总和相乘,在此矩形出栈时,要用它来更新答案).所以我们要记一个当前已加矩形的高度排名(无论是在栈里还是已经出栈).而又因为每个元素只被弹栈一次,所以不会有重复情况.

    4. 在所有矩形(m个)都考虑过后,我们再用还没有弹栈的元素再来个新一波答案,直到栈空

(3)AC

#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
int n,m;
int ans,maxs;
struct node{int hign,length;
}sta[maxn];
int f[maxn][maxn]; //记录每行每列的高 
void work(int x){int top=1,len=0;maxs=0;sta[top].hign=f[x][1];sta[top].length=1;for(int i=2;i<=m;i++){len=0;//维持递增 while(sta[top].hign>=f[x][i] && top>0){len+=sta[top].length; //继承长度,毕竟高的可以,低的也必可以 maxs=max(maxs,sta[top--].hign*len);}sta[++top].hign=f[x][i];sta[top].length=len+1;}len=0;//同上while while(top){len+=sta[top].length; maxs=max(maxs,sta[top--].hign*len);}ans=max(ans,maxs);
}
int main(){scanf("%d%d",&n,&m);char c;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>c;if(c=='F') f[i][j]=f[i-1][j]+1;}}//枚举每一行,解决子问题 for(int i=1;i<=n;i++) work(i);printf("%d",ans*3);return 0;
}

二.正方形的最大面积——dp

(1)例题

P1387 最大正方形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

(2)讲解

就是一个简单的dp,dp状态转移方程式为:

dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;

(3)AC

#include<bits/stdc++.h>
#define maxn 101
using namespace std;
int n,m;
int a[maxn][maxn],dp[maxn][maxn];
int ans;
int main(){cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==1){dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;	}ans=max(ans,dp[i][j]);}} cout<<ans;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/102164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014款玛莎拉蒂吉博力车驾驶人侧车窗玻璃无法升降

作者&#xff1a;建德宝悦汽车服务中心 方超 方超&#xff0c;从事汽车维修工作12年&#xff0c;现任建德宝悦汽车服务中心技术经理。 故障现象 一辆2014款玛莎拉蒂吉博力车&#xff0c;搭载3.0T发动机&#xff0c;累计行驶里程约为7.4万km。车主进店反映&#xff0c;驾驶人侧…

论文学习记录--零样本学习(zero-shot learning)

Socher R, Ganjoo M, Manning C D, et al. Zero-shot learning through cross-modal transfer[J]. Advances in neural information processing systems, 2013, 26. 注&#xff1a;中文为机翻 zero-shot learning&#xff1a;通过学习类别之间的关系和属性&#xff0c;使得模型…

JUC并发编程:Monitor和对象结构

JUC并发编程&#xff1a;Monitor和对象结构 1. Monitor1.1 对象的结构1.1.1 MarkWord1.1.2 Klass Word1.1.3 数组长度1.1.4 &#x1f330; 1. Monitor Monitor官方文档 我们可以把Monitor理解为一个同步工具&#xff0c;也可以认为是一种同步机制。它通常被描述为一个对象&…

【广州华锐互动】钢厂铸锻部VR沉浸式实训系统

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已成为当今最具潜力的技术之一。在钢铁行业中&#xff0c;VR虚拟仿真实训已经被广泛应用于培训和教育领域&#xff0c;特别是钢铁厂铸锻部&#xff0c;通过VR技术&#xff0c;可以大大提高培训效率&#xff0c;降低培训成本&…

浅谈IT 运维-变更管理

定义&#xff1a; 在企业的运维管理过程中&#xff0c;很多时候会有变更产生。这些变更通常来源于基础设施的升级&#xff0c;容量管理、可用性管理、软件更新、新服务的推出&#xff0c;服务级别目标的变化等等。 风险与问题举例&#xff1a; 变更在执行中常 常会引发以下一…

iMovie for Mac:专业级的视频剪辑体验!

如果你是一位视频爱好者&#xff0c;那么你一定不能错过iMovie for Mac这款专业视频剪辑工具。它不仅拥有简单易用的界面&#xff0c;而且功能强大&#xff0c;可以让你轻松完成复杂的视频剪辑任务。 一、界面友好&#xff0c;上手容易 iMovie for Mac的界面设计简洁明了&…

NoSQL之 Redis命令工具及常用命令

目录 1 Redis 命令工具 1.1 redis-cli 命令行工具 1.2 redis-benchmark 测试工具 2 Redis 数据库常用命令 2.1 set&#xff1a;存放数据&#xff0c;命令格式为 set key value 2.2 get&#xff1a;获取数据&#xff0c;命令格式为 get key 2.3 keys 命令可以取符合规则的…

冲量在线荣获2023中关村科学城科创大赛成长组TOP10优秀项目!

2023年9月15日&#xff0c;由市科委、中关村管委会&#xff0c;市发展改革委&#xff0c;市经济和信息化局联合指导的2023中关村科学城科创大赛圆满落下帷幕&#xff0c;该项赛事聚焦人工智能大模型&#xff0c;互联网3.0等前沿领域&#xff0c;吸引了国内外近300个优质项目报名…

竞赛选题 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

交易履约之结算平台实践 | 京东云技术团队

导读 京东科技业务在快速发展的同时&#xff0c;产生了众多线上化资金结算的需求。传统的线下资金结算模式有着人力成本高、耗时长、多方沟通协调成本高、结算准确率低等固有缺点&#xff0c;且无法满足“风法财审”对于资金流程的管控要求&#xff0c;在此背景下金道结算平台…

什么是统一端点管理和安全性

统一端点管理和安全是一种工具&#xff0c;可帮助 IT 管理、审核、监控和保护端点。除了内置的安全功能外&#xff0c;UEMS 还集成了对移动设备以及位于固定位置的设备的管理&#xff0c;管理操作包括分发软件和操作系统、安装补丁、收集资产详细信息、设备配置和实施安全策略。…

雪花算法生成ID传到前端之后精度丢失问题

第一种&#xff1a;使用注解解决 使用方便简单&#xff0c;粒度高&#xff0c;适用于部分字段需要单独转换的场景&#xff0c;灵活度高 // 两种注解&#xff0c;选其一即可 // JsonFormat(shape JsonFormat.Shape.STRING) JsonSerialize(using ToStringSerializer.class) pri…

【广州华锐互动】VR建筑施工事故体验:提高工人安全意识和责任感

VR建筑施工事故体验的意义在于通过模拟真实场景和情况&#xff0c;帮助人们更好地理解建筑施工中的安全问题&#xff0c;并提供一种安全、有效的方式来学习和掌握安全技能。 建筑施工是一项高风险的工作&#xff0c;涉及各种复杂的工作环境和操作过程。在现实中&#xff0c;建筑…

服务器数据恢复-服务器硬盘指示灯黄灯闪烁的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器面板上的硬盘指示灯显示黄色是一种警告&#xff0c;提示指示灯对应的服务器硬盘已经被服务器识别出存在故障&#xff0c;硬盘即将下线。如果出现这种情况&#xff0c;建议服务器管理员/运维人员及时用完好的硬盘替换显示黄色指示灯对应的…

Redis - php通过ssh方式连接到redis服务器

1.应用场景 主要用于使用php通过ssh方式连接到redis服务器&#xff0c;进行一些操作. 2.学习/操作 1.文档阅读 chatgpt & 其他资料 SSH - 学习与实践探究_ssh应用场景 2.整理输出 2.1 是什么 TBD 2.2 为什么需要「应用场景」 TBD 2.3 什么时候出现「历史发展」 TBD 2.4 …

【总结】kubernates 插件工具总结

在此记录工作中用到的关于 kubernates 的插件小工具&#xff0c;以防以后忘记 1、能显示 kubernates 所处上下文的插件 kube-ps1 github 地址&#xff1a; https://github.com/jonmosco/kube-ps1 效果 2、能方便切换 kubernates 上下文的插件 kubecm github 地址&#xff1…

PreScan与MATLAB联合仿真报错

一、 问题&#xff1a; Error:Matlab ||和&&运算符的操作数必须能够转换为逻辑标量值 二、解决办法 必须安装VS2013&#xff08;我装的VS2017不行的&#xff09;&#xff0c;然后重启prescan和MATLAB&#xff0c;编译通过&#xff0c;界面如下&#xff1a; 三、VS…

印度网络安全:威胁与应对

随着今年过半&#xff0c;我们需要评估并了解不断崛起的网络威胁复杂性&#xff0c;这些威胁正在改变我们的数字景观。 从破坏性的网络钓鱼攻击到利用人工智能的威胁&#xff0c;印度的网络犯罪正在升级。然而&#xff0c;在高调的数据泄露事件风暴中&#xff0c;我们看到了政…

【HTML】web worker

Web Worker是HTML5中的一项技术&#xff0c;可以在后台运行JavaScript代码&#xff0c;以提高Web应用程序的性能并改善用户体验。它允许在独立的线程中执行耗时的操作&#xff0c;而不会阻塞主线程。 主线程是浏览器用来渲染页面、处理用户交互和执行JavaScript代码的线程。然…

链接文件学习(七):英飞凌MCU Tasking编译器LSL链接文件解析 及代码变量定位方法

目录 1、Tasking的链接文件 1.1、DSRAM中的数据存放 1.2、PFlash中的代码存放 1.3、LMU 1.4、PSRAM 1.5、UCB 2、代码与变量定位 2.1、把变量放在 DSRAM