当前位置: 首页 > news >正文

Note - 斜率优化 DP

书接上回。

这是一种用于优化 DP 的东西(废话),其可以优化的表达式形如 \(\operatorname{dp}_i = \max\{a_i+b_j+c_i d_j\}\)

通用的东西

我们推式子。

\(dp_i = \max\{a_i+b_j+c_i d_j\} = a_i+\max\{b_j+c_i d_j\}\)

我们拆掉 \(\max\) 继续推式子。

\(dp_i = a_i+b_j+c_i d_j \implies -b_j = c_i d_j + a_i - dp_i\)

然后我们把式子视为一次函数解析式,那么从几何意义上来说这就是一个过点 \((d_j, -b_j)\),斜率为 \(c_i\) 的一次函数,我们要最小化其纵截距,即 \(a_i - dp_i\)

在脑海中想象一个凸包后我们发现,答案会取到凸包切直线的那个点,即凸包上第一个斜率大于 \(c_i\) 的线段的起始点。

法 I(单调队列优化)

要求:\(c, d\) 递增。

因为 \(d\) 递增,点一定是从左往右加入的,我们可以维护一个单调队列求斜率,每次加入点时如果这个点和前面的点组成的线段破坏了凸包性质那么前面那个点就可以直接踢掉。

因为 \(c\) 递增,维护时把斜率小于 \(c_i\) 的直接踢掉。这是线性的。

法 II(队列+二分优化)

要求:\(d\) 递增。

我们不能直接把斜率小于 \(c_i\) 的直接踢掉了,只能二分斜率。

法 III(平衡树维护凸壳)

这下点不是从左往右加入的了……

我们可以使用平衡树维护凸壳,但是我懒得写平衡树,在这种情况下建议用法 IV。

法 IV(李超线段树)

我们观察到我们的第一个式子。

\(dp_i = a_i+\max\{b_j+c_i d_j\}\)

我们惊奇地发现 \(\max\) 内的部分是一个一次函数,于是问题就被转化为了给定一堆能动态加入一次函数求 \(x = c_i\) 时的最高点。

这不是李超树板子来着。

http://www.jsqmd.com/news/379187/

相关文章:

  • 运用Python编程计算减压孔板孔口直径的研究
  • 智能食品营养数据采集实战:从YouTube到结构化营养成分的Python爬虫全解析
  • 图注意力网络在复杂关系推理中的优化
  • 小程序怎么开发自己的小程序 - 码云数智
  • 增强智能在AI原生应用中的持续学习机制
  • 小程序制作平台有哪些?2026主流小程序制作平台推荐 - 码云数智
  • 福特汽车2025年全球销量达439.5万辆,营业收入达到 1873 亿美元
  • 企业展示小程序制作流程 - 码云数智
  • 板刷贪心总结
  • 传统权限管理 VS 平台化权限管理:从“系统运维”到“平台治理”的跨越
  • 怎么做微信小程序,小程序制作平台推荐 - 码云数智
  • 企业展示小程序怎么弄,怎么自己做小程序 - 码云数智
  • 历史的长河在指尖流淌:2026年 Python 历史事件时间线数据爬取实战指南
  • 题解:AWC 0005
  • AI应用架构师实战:AI系统架构评审的5个经典案例解析
  • 搭建一个网站大概需要多少钱?网站建设方式及费用 - 码云数智
  • 摄影网站制作流程,0基础自助建站教程 - 码云数智
  • AI原生应用开发:知识抽取技术选型指南
  • 汽车参数对比爬虫实战:从静态页面到动态渲染的Python最新技术栈完全解析
  • 掌握大数据领域RabbitMQ的虚拟主机配置
  • 基于YOLOv5/v8/v10的人群密度估计系统:从模型训练到UI界面全栈实战
  • 监控与日志:跟踪AI Agent的运行状态
  • 基于深度学习的车牌识别系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 全新福特烈马RTR正式登场,彰显福特中国品质与设计实力
  • HDFS与Flink集成:流处理数据存储方案
  • 摄影网站制作流程,从零开始搭建一个摄影网站 - 码云数智
  • 2026广东最新燕窝公司top5推荐!广州等地优质燕窝厂家权威榜单发布,天然滋补品质之选 - 品牌推荐2026
  • 【AI智能体】99-AI大模型应用AI Agent培训总体介绍
  • Topo-RAG 企业混合检索实战(非常详细),性能飙升30%的秘密!
  • 多模态实体链接前沿技术(非常详细),KGMEL 融合知识图谱实战!