[note] slope trick

news/2025/10/18 16:27:14/文章来源:https://www.cnblogs.com/Lijiangjun4/p/19141754

slope trick 是一个优化二维 DP 的技巧。该二维 DP 需要满足以下条件:

  1. 第二维是连续的;

  2. 若 DP 的第一维固定时,第二维可以看作一个分段一次函数

  3. 这个函数每一段的斜率为整数

  4. 这个函数是凸函数(每一段的斜率是单调的)。

算法思路

考虑如何维护分段凸函数。首先记录这个函数最右端的函数解析式 \(y=kx+b\),然后记录这个函数的斜率变化点,如果函数在某个 \(x\) 值斜率变化了 \(1\),那么就把 \(x\) 加入集合,如果变化不是 \(1\) 就变化多少加多少个 \(x\) 到集合。

比如这个分段函数:

那么我们记录最右边的一次函数 \(y=-2x+8\),然后记录变化点 \(\{-4,-2,-2,2\}\)。(因为斜率在 \(x=-2\) 处从 \(1\) 变成了 \(-1\),因此加入两次。)

slope trick 之所以可以优化 DP,是因为这样维护分段函数可以高效支持某些操作。

1. 两个分段函数相加

两个分段函数相加,得到的分段函数最右端的解析式为原来两个的解析式之和。

如图,加一次函数:

函数绿色(\(y=-2x+8,\{-4,-2,-2,2\}\)),加上一次函数红色(\(y=x+2,\varnothing\)),得到蓝色函数 (\(y=-2x+8+x+2=-x+10\)\(\{-4,-2,-2,2\}+\varnothing=\{-4,-2,-2,2\}\))。

同样常用的还有绝对值函数:

绿色函数(\(y=-2x+8,\{-4,-2,-2,2\}\))加红色绝对值函数(\(y=-x-2,\{-4,-4\}\))得到蓝色函数(\(y=-3x+6,\{-4,-4,-4,-2,-2,2\}\))。

2. 取函数最小/最大值

函数斜率为 \(0\) 的时候,函数取到最小/最大值。有的人说,函数的最小值是一个“尖”,并不存在斜率为 \(0\) 的时候。但注意到我们记录了分段函数的斜率变化点,实际上在“尖尖”上斜率是先由负变成 \(0\) 再到正数的,你可以认为那就是斜率为 \(0\) 的时候。

为了维护这个函数的极值点,我们可以把斜率变化点以函数极值点为边界分成左右两个部分,用堆来维护(参考对顶堆),设左右两个堆为 \(L,R\),最右一段的函数解析式为 \(y=kx+b\),那么我们只要保证 \(R\) 的大小为 \(k\)\(R\) 堆顶的斜率变化点对应的函数值就是函数的极值。

3. 取函数的前缀/后缀的最大/最小值

设原分段函数为 \(f\),那么它的前缀最小/最大值 \(F(i)=\min/\max_{j=1}^{i}f(j)\),后缀最小/最大值 \(G(i)=\min/\max_{j=i}^nf(j)\) 是可以快速的得到的。如图是一个前缀最大值:

图片

由于这是一个凸函数,斜率是单调的,会发现到了斜率为 \(0\) 的那一刻,函数值不变了!

刚刚上一段维护的堆 \(L,R\) 就有用了,只需清空其中一个(比如这次是清空 \(R\)),就可以维护了。

接下来结合例题来解释如何用 slope trick 优化 DP。

例题

P4597 序列 sequence

题目描述

给定一个序列,每次操作可以把某个数 \(+1\)\(-1\)。要求把序列变成非降数列。

对于 \(100 \%\) 的数据,\(1 \le n \le 5 \times {10}^5\)

解题思路

容易设计出二维的 DP 方案:设 \(f_{i,j}\) 表示第 \(i\) 个数改为 \(j\) 所需最少操作数。则:

\[f_{i,j}=\displaystyle\min_{k\le j} f_{i-1,k}+|a_i-j| \]

发现 \(|a_i-j|\) 是一个下凸函数,而 \(f_1\) 也是下凸函数(初始值为绝对值函数),因此下凸函数加下凸函数还是下凸函数,\(f_i\) 均为下凸函数。

于是从 \(f_i\) 推到 \(f_{i+1}\) 就是取前缀 \(\min\) 后再加绝对值函数。由于全程都是取前缀 \(\min\),只用维护堆 \(L\)。最右侧的函数 \(y=kx+b\) ,由于加上绝对值函数 \(k\)\(1\),斜率变化点多 \(2\) 个, \(R\) 堆大小为 \(1\),取完前缀 \(\min\)\(R\) 堆清空,因此每次的操作就是往 \(L\) 堆加 \(2\) 个斜率变化点再弹掉 \(1\) 个。

也可以按对顶堆的维护来理解。

#include<bits/stdc++.h>
using namespace std;
priority_queue<int> q;
int main()
{int n;long long ans=0;scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);q.push(x),q.push(x);ans+=q.top()-x;q.pop();}printf("%lld\n",ans);return 0;
}

如果以后遇到其他题目再补充

参考

https://www.cnblogs.com/ruierqwq/p/18017106/slope-trick

https://www.luogu.com.cn/article/bn3a465i

https://www.luogu.me/article/ma1xv4pg

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

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

相关文章

three自带的框选工具SelectionBox、SelectionHelper

🧱 一、SelectionBox 是什么? SelectionBox 是 Three.js 示例库中的一个工具类(examples/jsm/interactive/SelectionBox.js),用于通过定义一个**三维空间包围盒(Box3)**来选中视野内的物体。 换句话说:它根据…

2025年精密磨床/CNC机械加工厂家推荐榜单:涵盖铣床/车床/磨削/多轴/复合加工,铝/不锈钢/钛合金/模具钢/塑料件定制,汽车/医疗/航空航天/机器人零件及模具工装夹具加工

2025年精密磨床/CNC机械加工厂家推荐榜单:专业采购决策指南行业背景与发展趋势随着制造业向高质量、精密化方向转型升级,精密磨床与CNC机械加工行业正迎来前所未有的发展机遇。在工业4.0和智能制造的大背景下,精密加…

2025 电动缸源头厂家最新推荐榜:剖析国产厂商成本优势与技术实力,附权威选购指南

在工业 4.0 深化推进的背景下,电动缸作为自动化生产的核心动力部件,需求持续攀升,但市场乱象却让采购决策陷入困境。部分厂家依赖外购核心部件导致兼容性差、故障率高,甚至通过减配原材料缩短产品寿命,而近年新兴…

Claude Haiku 4.5新功能、模型与定价,免费试用国内直连教程

Claude Haiku 4.5新功能、模型与定价,免费试用国内直连教程Claude 4.5 的新功能了解 Claude 4.5 中引入的新功能和改进,包括 Sonnet 4.5 和 Haiku 4.5 模型。Claude 4.5 引入了两个针对不同用例设计的模型:Claude S…

网络编程实践笔记_4_阿贝云_免费云服务器_简易博客_

简易博客 AI搜索 python后台有了简单方便的服务器,(在我的理解下还是个电脑主机,只不过连着网,实际就像个内网的AGV小车,可以ssh到他而已), ssh远程控制和scp远程传输文件之后,就可以准备代码了, 没做过网页编…

10 17

4.4终于把这道题调出来了啊/ll,不容易啊/ll 首先我写错的最大的点是 \(sum_x\) 把它也异或了 \(siz_x\) 次 其次是 op = 1 的 soltwo 的时候没有判 \(x = y\) 的情况 然后是 \(soltwo(x,y)\) \(x\) 往上的时候没有让…

深入解析:日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(2):语法 +考え方15+2022年7月N1

深入解析:日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(2):语法 +考え方15+2022年7月N12025-10-17 10:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: norma…

2025年铝单板厂家推荐排行榜,氟碳铝单板,木纹铝单板,冲孔铝单板,外墙铝单板,雕花铝单板,异形铝单板,双曲铝单板公司推荐!

2025年铝单板厂家推荐排行榜,氟碳铝单板,木纹铝单板,冲孔铝单板,外墙铝单板,雕花铝单板,异形铝单板,双曲铝单板公司推荐!行业背景与发展趋势铝单板作为现代建筑装饰材料的重要组成部分,近年来在建筑外立面、室…

2025 年最新推荐热熔胶源头厂家榜:覆盖书刊装订 / 包装等场景,助企业选高性价比产品

当前热熔胶应用广泛,却面临产品质量参差不齐、技术适配性不足、服务响应滞后等问题,下游企业在选购时常陷入困境,难以找到契合自身需求的高性价比源头厂家。为解决这一难题,帮助印刷、包装、鞋材等行业企业精准筛选…

开发日志

一个常用的工具:Mapster 进行一些对象属性复制的时候很方便。跟基础库里的DeepCopy配置起来使用。 配置文件的保存:目前基本上还是使用XML为主。 尝试了HASH,JSON,YAML,最终还是感觉XML使用总体体量更好。 XML,可…

Gitee 2025:中国开发者生态的崛起与本土化优势

Gitee 2025:中国开发者生态的崛起与本土化优势 在全球化与本土化交织的软件开发时代,中国开发者正面临一个关键选择:是继续依赖国际化的GitHub,还是拥抱更符合本土需求的Gitee?2025年的今天,这个答案已经变得清晰…

C++中的new操作符:new operator、operator new、placement new

new操作符(new operator) 当你写这种代码时: string *ps = new string("Memory Management"); 你使用的new是new操作符。 new操作符的动作包含两部分:在堆上为创建的对象申请内存 调用对象的构造函数进行…

JavaBean知识总结及范例

一、什么是 JavaBean? JavaBean 本质上是一个符合特定编码约定的 Java 类。它不是一个框架或技术,而是一种标准/规范。遵循这个规范的类,可以被特定的工具(如 IDE、Spring 框架等)更便捷地发现、使用和操作。二、…

C++20 协程的简单示例

C++20 协程的简单示例以下使用编译器版本为:gcc version 11.4.0 c++20 懒得介绍协程是什么,先直接贴一个最简单的例子:1 #include <iostream>2 #include <coroutine>3 #include <stdexcept>4 #in…

HMAC-SHA256 请求签名与验签实践(Python 可直接复用)

HMAC-SHA256 请求签名与验签实践(Python 可直接复用)目标:沉淀一套“能复制即用”的签名/验签规范与代码,解决接口防篡改与防伪造。 关键规则:待签名串:METHOD + "\n" + Content-MD5 + "\n"…

2025 年家装管道生产厂家最新推荐排行榜:覆盖云南昆明贵州贵阳四川成都重庆,精选优质 PPR/PVC 管道品牌,解决选购难题

在家装过程中,管道作为水电系统的核心部件,其质量直接决定居住安全与生活舒适度。当前家装管道市场混乱,部分厂商偷工减料,导致管道抗压差、易老化、密封性不足,漏水渗水问题频发,给业主带来巨大财产损失与生活困…

同一设备多账号登录,如何避免消息推送“串门”?

对各应用厂商而言,推送通知消息是App提高用户活跃度和转化率的高性价比营销工具。然而,当一个用户设备登录多个账号时,开发者可能会遇到同一条消息在同一设备的不同账号上重复展示的问题,这不仅降低了消息推送的精…

强合规行业DevOps选型:告别工具拼凑,找到真正适配的国产化DevOps方案

强合规行业DevOps平台选型需“建体系”,传统开源工具组合易陷数据割裂、合规难达标困境。本文对比三款DevOps产品,其中国产DevOps平台契合信创DevOps需求,内置合规卡点与追溯能力,适配国产化环境,助力企业平衡合规…

实用指南:精读 C++20 设计模式:行为型设计模式——观察者模式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大疆无人机RTMP推流至LiveNVR实现web页面实时播放与录像回放,并可以转GB28181协议级联推送给上级监控视频管理平台

@目录1、无人机推流转国标2、获取RTMP推流地址2.1、RTMP推流地址格式2.2、推流地址示例2、设备RTMP推流3、配置拉转RTMP3.1、直播流地址格式3.2、直播流地地址示例3.3、通道配置直播流地址4、配置级联到GB28181国标平台…