PERIODNI

news/2024/12/22 20:26:20/文章来源:https://www.cnblogs.com/YzaCsp/p/18622482

思路

哇, 看到这个就直接想到昨天学的经典应用 : 最大子矩形

好吧还是认真推一下

完蛋了是计数, 我们没救了

首先按照高度为优先级, 位置为键值建一颗小根笛卡尔树, 我们玩下样例找下性质

例如题目中给出的图片, 我们建成笛卡尔树就长这样

pAOLNpq.md.png

其中每个点由 \(\{键值, 优先级\}\) 组成

观察这颗笛卡尔树, 我们看看有什么性质

容易发现每个点如果要放上数字, 那么一定只能放一个, 因为题目中明确说明 "不得有任意两个数在同一行或者同一列"

好吧不太会做, 我们去看下 \(\rm{TJ}\)

\(\rm{Part \ 1}\) : 笛卡尔树分割多边形

这里有一个前置知识, 也就是在规范的四边形中, 这个问题应当如何求解

pAOLD74.md.png

那么我们想办法把这些多边形拆开方便计算, \(\rm{belike}\) :

这样构成的若干个矩形正好满足笛卡尔树的性质:

pAOL0nU.md.png

你发现我们之前对 \(\{h_i\}\) 建树, 不刚好就长这样吗
具体的, 一定是 \(h_i\) 小的点更早被分割, 善哉, 完美符合要求
一个小问题是有可能有些情况会出现不能恰好分成二叉的情况, 但是你发现这种情况下可以将其二度化照样处理, \(\rm{belike}\) :
pAOvcVO.md.png

\[\Downarrow \]

pAOv2Ie.md.png

在实现上, 你只需要把每次分割不全的部分合到一起丢下去下次在分开即可, 当然如果用笛卡尔树建那就不用管

注意对于笛卡尔树上的点, 我们都需要记录其长以及宽, 以下设为 \(L_i, H_i\)

时间复杂度 : \(\mathcal{O} (n)\)

\(\rm{Part \ 2}\) : 树上背包

有了以上的知识, 我们就可以把这个题转化成一个在树上做背包的计数类问题

具体怎么做? 先学一下树上背包

\(u\) 子树上的点看做一个组, 把 \(u\) 子树中所有点的最大取点和看做容量, 每个点看做物品, 体积为 \(1\) \(\cdots\)

其实个人认为不需要这么复杂, 树上依赖的背包问题, 仅仅只是把状态的一维定义成了当前的 "容量" , 也不用去刻意的套

\(f_{i, j}\) 表示 \(i\)\(i\) 的子树中, 取了 \(j\) 个互不冲突的点的可能性, 记 \(i\) 的左儿子为 \(l\) , 右儿子为 \(r\)

显然的, 这相当于在笛卡尔树上进行树形 \(\rm{dp}\) , 由于其良好的二叉树性质, 还是很好处理的

找一个朴素的转移, 不难写出 (需要注意的是每个点互不相同, 题目没有明确表述)

\[f_{i, j} = \sum_{k = 0}^{j} \sum_{h = 0}^{j - h} f_{l, k} \cdot f_{r, h} \cdot {L_i \choose j - k - h} \cdot {H_i \choose j - k - h} \cdot {(j - k - h)}! \]

初始化每个叶子结点 \(i\) : \(f_{i, j} = {L_i \choose j} \cdot {H_i \choose j } \cdot j!\)

答案即为 \(f_{root, k}\)

实现

框架

首先根据 \(\{h_i\}\) 建树
关于如何记录 \(H, L\) :
你发现每一个点的 \(H\) 等于其高度减去其父亲高度, 每一个点的 \(L\) 可以通过

代码

总结

笛卡尔树可以解决一类最大子矩阵问题

组合数学处理规则图形是方便的, 一般把多边形转化成规则图形

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

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

相关文章

2024-2025-1 20241421 《计算机基础与程序设计》第十三周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计 这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十三周作业 这个作业的目标 复习知识,巩固所学 作业正文 https://www.cnblogs.com/118qa/p/18622459 教材学习内容总结概念 结构体是一种用户自定义的数据类型,…

Shell脚本编程题(八道)

Linux操作系统期末编程题——Shell脚本编程题(八道) 第一题 1.编程实现从键盘获取一个整数,按下列情况输出对应结果: (1)当该数值为 6 或 7 时,输出“休息日(Rest Day)”。 (2)当该数值为 1 至 5 时,输出“工作日(Working Day)”。 (3)其他情况输出“输入错误(E…

构建全方位大健康零售帮助中心:提升服务与体验

在当今社会,随着人们健康意识的不断提升,大健康零售市场迎来了前所未有的发展机遇。然而,面对琳琅满目的健康产品、复杂的健康理念以及日益增长的消费者需求,如何提供一个高效、便捷、全面的帮助中心,成为了大健康零售企业亟待解决的问题。在此背景下,引入Helplook工具,…

高新技术企业知识管理新篇章:高效内部知识库建设

高新技术行业作为经济发展的重要引擎,其创新能力和发展速度直接关乎国家的整体竞争力。然而,在快速发展的背后,高新技术企业面临着知识管理不善、信息共享不畅等挑战。为了应对这些挑战,高效搭建内部知识库显得尤为重要。本文将以Helplook工具为例,探讨如何高效构建高新技…

C# winform自定义图片空间 缩放、拖拽、绘画

首先简单介绍一下图片自定义的功能 1、滑动鼠标滚轮缩放图片; 2、按住鼠标左键拖拽图片; 3、可选绘画矩形、圆、直线、画笔; 4、可选连续绘画、单次绘画; 5、每次绘画通过事件返回起点坐标、终点坐标; 6、右击可重置图片大小(适应窗口)、原始尺寸(100%)、另存当前图片、清…

实验

任务41 #include <stdio.h>2 #define N 103 4 typedef struct {5 char isbn[20]; 6 char name[80]; 7 char author[80]; 8 double sales_price; 9 int sales_count; 10 } Book; 11 12 void output(Book x[], i…

T网站景点评论爬虫分享

由于学校作业需要对景点评论做一个汇总和分析,这里以T程网站为例,进行爬虫分析,爬取景点评论。开干! 景点评论页面 首先找到我们要爬取的评论页面:F12打开开发者工具,点击Network,Fetch/XHR:这里遇到个问题,页面被添加了无限断点,Fetch/XHR中没有任何数据,推荐用以下…

【每日一题】20241222

记住,只有软弱的人才从他人身上寻求回报。我们的回报是我们自己。【每日一题】某流水线上生产的一批零件,其规格指标 \(X\) 可以看作一个随机变量,且 \(X\sim N(98,\sigma^2)\), 对于 \(x\geq100\) 的零件即为不合格,不合格零件出现的概率为 \(0.05\).现从这批零件中随机抽…

【每日一题】2024

记住,只有软弱的人才从他人身上寻求回报。我们的回报是我们自己。【每日一题】某流水线上生产的一批零件,其规格指标 \(X\) 可以看作一个随机变量,且 \(X\sim N(98,\sigma^2)\), 对于 \(x\geq100\) 的零件即为不合格,不合格零件出现的概率为 \(0.05\).现从这批零件中随机抽…

Git-第一次提交

第一次提交 配置用户名和邮箱 git config --global user.name <username> git config --global user.email <email>目录结构first-steps就是一个示例项目 创建版本库 版本库是用来存储项目本身及其历史的 进入到first-steps目录中 cd first-steps git init提交 git…

一种隐藏VBA代码模块和恢复可见的方法

为了保护自己写的VBA程序代码不被他人抄袭,你可能想到给程序添加查看密码。然而这种密码是很容易被破解的,其中的一种破解方法详见我之前写的一篇文章:如何把Excel的VBA程序封装成DLL并分发给他人使用。其实还有很多种破解方法,包括下面即将介绍的这种隐藏代码模块的方法也…

渗透测试-前后端加密分析之AES加密下的SQL注入

本文是高级前端加解密与验签实战的第9篇文章,也是最后一篇文章。本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前后端加密进行SQL注入。本文是高级前端加解密与验签实战的第9篇文章,也是最后一篇文章。本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本…