洛谷P4147 悬线法处理最大子矩形问题模板

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

题意:

给出一个n×mn\times mn×m的数组,每个位置都是FFF或RRR字符,求出最大的一块矩形面积,使得这块矩形不包含任意的RRR字符

Solution:

悬线法:一种解决有障碍点的最大子矩形问题的算法,障碍点是不能包含的点和边界

首先明确一点,这样的最大矩形的高一定是两个障碍点间的竖直距离,我们只需要找出每个点向上最远能走多远,所有点的这个属性一定包括了答案矩形的高,此时我们找出了高,这个就是一根悬线,只需要看这个悬线最多能左右平移多远,这样就能获得在每个点的高最优的情况下的最优长,又因为每个点我们都计算了一遍,于是我们一定能找出这个全局最优面积的

读入时初始化:当这个点是FFF时,向左向右最远目前位置是到本身位置,向上最长的长度是本身长度111

if(s[i][j]=='F') l[i][j]=r[i][j]=j,up[i][j]=1;

转移方程:向左向右能走多远是向上最长距离的所有点共同决定的,我们先处理自己能左右走多远,然后再结合其他的点缩小范围,处理自己的为:

for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
        if(s[i][j]=='F'&&s[i][j-1]=='F') l[i][j]=l[i][j-1];
    for(int j=m;j>=1;j--)
        if(s[i][j]=='F'&&s[i][j+1]=='F') r[i][j]=r[i][j+1];
}

一条最优高上的互相约束为:

for(int i=2;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        if(s[i-1][j]=='F'&&s[i][j]=='F')
        {
            l[i][j]=max(l[i][j],l[i-1][j]);
            r[i][j]=min(r[i][j],r[i-1][j]);
            up[i][j]=up[i-1][j]+1;
        }
    }
}

时间复杂度O(nm)O(nm)O(nm)

总代码:

#ifndef stdjudge
#include<bits/stdc++.h>
#endif
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<numeric>
#include<ctime>
#include<cmath>
#include<vector>
#include<bitset>
using namespace std;

using ll=long long;
const int N=1e3+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=998244353;

int n,m,l[N][N],r[N][N],up[N][N];
char s[N][N];

int main()
{
	#ifdef stdjudge
		freopen("in.txt","r",stdin);
	#endif
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			while(s[i][j]!='F'&&s[i][j]!='R') s[i][j]=getchar();
			if(s[i][j]=='F') l[i][j]=r[i][j]=j,up[i][j]=1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
			if(s[i][j]=='F'&&s[i][j-1]=='F') l[i][j]=l[i][j-1];
		for(int j=m;j>=1;j--)
			if(s[i][j]=='F'&&s[i][j+1]=='F') r[i][j]=r[i][j+1];
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(s[i-1][j]=='F'&&s[i][j]=='F')
			{
				l[i][j]=max(l[i][j],l[i-1][j]);
				r[i][j]=min(r[i][j],r[i-1][j]);
				up[i][j]=up[i-1][j]+1;
			}
		}
	}
	ll ans=-INF;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) ans=max(ans,1ll*(r[i][j]-l[i][j]+1)*up[i][j]);
	cout<<3*ans;
	return 0;
}
【STM32单片机】RS485通信—基于STM32G474芯片 做项目需要用485通信来控制Go电机参考资料:【【STM32F103C8T6系列】10. 实验例程——485(USART串口)通讯实验】 https://www.bilibili.com/video/BV19w411r7ka/?PDF: STM32G474 开发指南 正点原子 DMG474 开发板教程 第28章485只是物理层,代码逻辑还是UART串口通信,相当于是电路有RS485转换芯片,所以还是用UART串口通信方式。 阅读详情

相关推荐

【洛谷 P1719】最大加权矩形 题解(前缀和+贪心+容斥原理)

为了更好的备战 NOIP2013,电脑组的几个女孩子 LYQ,ZSC,ZHQ 认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们,而是先给她们出了一道数学题,并且告诉她们:你们能获得的运动场地的面积就是你们能找到的这个最大的数字。校长先给他们一个n×n矩阵。要求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大。矩阵的每个元素属于−127。

HEX9CF的技术博客 1962

STM32实战:5分钟搞定CanFestival协议栈下的CANopen心跳报文配置(附避坑指南)

本文详细介绍了如何在STM32平台上使用CanFestival协议栈快速配置CANopen心跳报文,包括硬件准备、协议栈移植、心跳报文配置及常见问题解决方案。通过实战步骤和避坑指南,帮助开发者高效实现节点状态监控,提升工业控制系统的可靠性。

win55的博客 744

算法笔记:最大矩形面积

最大子矩形问题:在一个给定的矩形中有一些障碍点,要找出网格内部不包含任何障碍点,且边界与坐标轴平行的最大子矩形。常用的算法有两个:单调栈,时间复杂度O(n*m)(原文没有提如何解决忽略了左边界与整个举行的左边界重合,而右边界覆盖了一个障碍点的情况,实际解决方法是从左到右、从右到左各搜一遍)

GANIT的博客 1020

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 816

联想服务器ThinkSystemRAID阵列设置教程

关注我不迷路,全是干货! 以联想ThinkSystemSR530为例子进行示范。 开机点按【F1】 点击——【UEFI设置】 依次点击——【系统设置】——【存储】 点击——【RAID卡】 PS:本次服务器配置的是730-8i 阵列卡,按实际情况选中需要设置的阵列卡即可。 点击——【Main Menu】 点击——【Configuration Management】 点击——【Create Virtual Drive】 点击——【Select RAID Leve..

littlelotusK的博客 2万+

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

专题--最大面积

SY奇星的OI博客 298

Arduino平台软硬件原理及使用——Arduino Uno板卡的使用

Arduino Uno板卡的基本使用

洪博hopes的博客 4171

算法基础篇:(二十一)数据结构之单调栈:从原理到实战,玩转高效解题

本文深入解析了单调栈这一高效数据结构。首先介绍了单调栈的基本概念,即在普通栈的基础上增加元素单调性约束,可分为递增栈和递减栈。接着详细讲解了四种核心应用场景:寻找左右侧最近更大/更小元素,并提供了对应的C++代码实现。通过洛谷P5788等模板题和发射站、柱状图最大矩形等实战案例,展示了单调栈如何将O(n²)问题优化为O(n)解法。最后总结了单调性选择、遍历方向等核心技巧,并给出避免数据溢出、优化IO等实用建议。掌握单调栈能有效解决"找最近最值"类问题,是算法竞赛和面试中的重要工具。

2301_79248256的博客 3056

华为OD机试真题 新系统 2026-04-19 Java&Go 实现【分辨率排序】

华为OD机试真题 新系统 2026-04-19 Python&JS 实现【分辨率排序】

MISAYAONE的博客 302

把 ABAP 开发对象装进 XML 行李箱:SAPlink 安装、插件、升级与协作迁移全指南

SAPlink是一款用于在SAP NetWeaver系统间导入导出ABAP对象的工具,特别适合临时协作、系统孤岛等场景。它通过XML文件(Slinkee和Nugget两种格式)传输开发对象,支持插件扩展多种对象类型。安装时需注意版本兼容性、权限和激活流程,使用时要区分覆盖选项的风险。相比正式运输系统,SAPlink更适用于快速共享、原型交付等非生产场景,但需配合命名规范和协作策略确保可维护性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

单调栈求最大矩形面积(洛谷4147)

#include&lt;bits/stdc++.h&gt; using namespace std; int n, m, pos[1005][1005]; int ans, maxs; char x; struct node { int height, length; }s[1005]; void calc(int x) { int top = 1, temp = 0; maxs = 0;...

best_jayc的博客 1598

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《算法竞赛进阶指南》直方图中最大的矩形

直方图中最大的矩形 直方图是由在公共基线处对齐的一系列矩形组成的多边形。 矩形具有相等的宽度,但可以具有不同的高度。 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: 2559_1.jpg 通常,直方图用于表示离散分布,例如,文本中字符的频率。 现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。 图例右图显示了所描绘直方图的最大对齐矩形。 输入格式 输入包含几个测试用例。 每个测试用例占据一行,用以描述一个直方图,并以整数n开始,表示组成直方图的矩形数目。

qq_42635159的博客 470

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

洛谷P1169_悬线法求最大矩阵面积

求最大的x矩阵的面积 h[maxn][maxn]记录该位置向上最多扩展的位置 初始化:第0行全置位0 更新: h[i][j] = a[i][j]==x?h[i - 1][j]+1:0; l[maxn][maxn], r[maxn][maxn];记录向左/右最先到达不是x的位置 tmp记录上一次不为x的位置的列号 初始化:将l[][]的第0行全置位0,r[][]的第0行全置位m+1 更...

喵 喵 喵~ 352

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷 - 最大加权矩形 (前缀和,dp,矩阵压缩)

题目链接 题目: 思路: 这个就类似最大子序列,有人会问,这和最大子序列有关系???,其实在我们进行矩阵压缩后,这个问题其实就变成了最大子序列 矩阵压缩:我的理解就是把矩阵分成小的矩阵(把每种情况都分出来)。 例我们有矩阵: 1 2 3 4 5 6 7 8 9 我们先枚举第一行 1 2 3. 再加上的第二行 1 2 3 和 4 5 6 再加上第三行 1 2 3 和 4 5 6 和 7 8 9 再枚举第二行 4 5 6 再加上第三行 4 5 6 和 7 8 9 再枚举第三行 7 8 9 这样做有什么意思呢

give it a try 495

洛谷 P4147 玉蟾宫 (最大子矩形问题)

这道题用到了悬线法,非常牛逼,可以看这个论文。 https://blog.youkuaiyun.com/twtsa/article/details/8120269 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; #define REP(i, a, b) fo...

自强不息 厚德载物 276

【Big Barn 巨大的牛棚】【转】

农夫约翰想要在他的正方形农场上建造一座正方形大牛棚。他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方。我们假定,他的农场划分成 N x N 的方格。输入数据中包括有树的方格的列表。你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚。牛棚的边必须和水平轴或者垂直轴平行。 格式 EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方

geng4512的专栏 1697

单调栈 (求最大矩形面积,求最大1的矩形面积)

转载:https://blog.youkuaiyun.com/hopeztm/article/details/7868581 poj 3494 Largest Submatrix of All 1’s #include <iostream> #include <cstring> #include <algorithm> #include <stack> #...

wwwlps的博客 1460

最大矩形面积 --漫漫算法路 刷题篇

给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。 输入描述: 输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000) 第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)

qishun2xiao的博客 1420

悬线法--解决图内最大矩形类问题

有这样一类题,让你在一个区域范围内找到最大矩形(面积/边长) eg. 棋盘制作 巨大的牛棚 玉蟾宫 这类问题都是在一个有限制条件的区域内取矩形 通用“悬线法” 解决 悬线法 顾名思义,假设图中有一条平行于y轴的线,线上的某一段点能左右移动的范围+这段线的长度=一个矩阵的面积 因此我们可以预处理出每个点左右移动的范围,最后合并范围相同的点寻找答案 其中限制条件在每次状态转移是加上 玉蟾宫代...

weixin_42754202的博客 377

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 15

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 437

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 362

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 78

AI和大模型—从克里金算法说开去

克里金算法源于矿业勘探,通过空间自相关性实现稀疏数据下的最优预测,核心优势在于不确定性量化。在AI大模型中,其等价于高斯过程,广泛应用于超参数优化、小样本建模与推理调度。尽管面临计算复杂度高、核函数选择难等问题,通过稀疏化、分治法与低秩近似可有效优化。该方法在降低训练成本、提升泛化能力及减少幻觉方面表现突出,尤其适用于高维、高成本的智能系统优化,具有重要借鉴价值。

fpcc的专栏 602

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176
上一篇: 洛谷P3807 lucas定理模板
下一篇: 2019银川icpc K 思维,悬线法dp
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值