dp 凸优化

时间有点仓促,过几天会补。

来自 czz 学长的课,SMWC -> Day4

目录

  • 凸函数介绍
  • WQS二分
    • [1. P2619【国家集训队 2】Tree I](#1. P2619【国家集训队 2】Tree I)
    • [2. CF739E Gosha is hunting](#2. CF739E Gosha is hunting)
  • 闵可夫斯基和
    • [1. QOJ-5421 Factories Once More](#1. QOJ-5421 Factories Once More)
    • [2. GD 省集 tower](#2. GD 省集 tower)
  • [Slope Trick](#Slope Trick)
    • [1. CF713C](#1. CF713C)
    • [2. ABC217H](#2. ABC217H)
    • [3. APIO2016 烟火表演](#3. [APIO2016] 烟火表演)
  • 总结

凸函数介绍

凸函数即为一阶导单调的函数,在 OI 中通常体现为差分后单调的函数。这类具有凸性的问题在最优化问题中十分常见,通常具有其对应的线性规划或者费用流模型,也通常使用反悔贪心或者模拟费用流等方法解决。


WQS二分

详见 this

有一类问题,通常具有"选择恰好 k k k 个"的标志,但是在 d p dp dp 状态中记录 k k k 复杂度又太高,此时通常使用 WQS二分 解决。
WQS二分 使用的前提为问题关于选择个数 k k k 具有凸性。

1. P2619【国家集训队 2】Tree I

模板题

2. CF739E Gosha is hunting

凸性还可以联系到网络流,比如这题。

建立网络流模型,然后模拟网络流做法。 O ( n l o g n ) O(nlogn) O(nlogn)


闵可夫斯基和

( m i n , + ) (min, +) (min,+) 和 ( m a x , + ) (max, +) (max,+) 卷积是常见的凸函数卷积,不难证明两个凸函数经过这样的卷积之后仍然是凸函数。(且这样的卷积常见于背包)

闵可夫斯基和常与分治等手段结合。

( m a x , + ) (max,+) (max,+) 卷积: f ( i ) = m a x j + k = i ( g ( j ) + h ( k ) ) f(i) = max_{j+k=i} (g(j) + h(k)) f(i)=maxj+k=i(g(j)+h(k)) 。

1. QOJ-5421 Factories Once More

考虑 树形dp ,设 f u , i f_{u,i} fu,i 表示 u u u 子树内选了 i i i 个点的最大值。容易得到 d p dp dp 转移方程, f u , i = m a x j + k = i f u , j + f v , k + j × k × w ( u , v ) f{u,i} = max_{j+k=i} f_{u,j} + f_{v,k} + j \times k \times w(u, v) fu,i=maxj+k=ifu,j+fv,k+j×k×w(u,v)

发现为凸函数,可以通过 ( m a x , + ) (max,+) (max,+) 卷积做成闵可夫斯基和的形式,进行加速 d p dp dp 。

2. GD 省集 tower

不会。

用闵可夫斯基和可以做到 O ( n l o g n ) O(nlogn) O(nlogn) ,但是分类讨论的常数可达 81 81 81 倍。


Slope Trick

Slope Trick 是一种优化 d p dp dp 的方法。核心思想是储存 d p dp dp 转移的关键信息(如分段函数的分界点)然后利用数据结构高效维护转移。

例如凸函数,我们只需维护初始的斜率,初始的值和斜率的变化点即可。

常见的维护操作有:函数相加,找最值,加一个一次函数,取前后缀max,平移,翻转等。

1. CF713C

经典模板题。

2. ABC217H

弄一个暴力 d p dp dp ,设 f i , j f_{i,j} fi,j 表示 T i T_i Ti 时刻角色在 j j j 可能的最小伤害,转移就枚举上一次在哪:
f i , j = m i n j k + l e n = j − l e n f i − 1 , k + ( j \> X i ) = D i × ∣ j − X fi,j = minjk+len=j−lenfi−1,k + (j \> Xi) = Di × |j − X fi,j=minjk+len=j−lenfi−1,k+(j\>Xi)=Di×∣j−X

事件的贡献是一个下凸函数,发现转移是一个先平移后加一个下凸函数的形式,不难验证仍然 fi 仍然是一个下凸函数。考虑用两个堆分别维护拐点。由于是下凸函数,则最小值的左边是单调递减,最小

值的右边是单调递增。则只需把维护最小值左边的拐点位置统一减去 len,最小值右边的拐点位置统一加上 len 即可。加上的函数很明显拐点只有一个 Xi,插入拐点然后维护堆的大

小即可。

3. APIO2016 烟火表演

又不会。

总结

===

相关推荐
力学与人工智能7 天前
论文分享 | 优化离散损失求解反问题:无需神经网络的快速精确学习
人工智能·神经网络·学习·优化·离散损失·反问题求解·快速准确学习
力学与人工智能10 天前
PPT分享 | 洛桑联邦理工学院魏震:深度几何学习在工业设计优化中的应用
学习·优化·工业设计·深度几何学习·洛桑联邦理工学院
汉克老师12 天前
GESP6级C++考试语法知识(五十五、动态规划----背包问题(八、混合背包)
c++·动态规划·dp·背包问题·gesp六级·混合背包问题
梦想的颜色15 天前
MySQL 数据存储结构与查询执行生命周期深度解析
运维·数据结构·数据库·mysql·线程·优化
寻道模式17 天前
【时间之外】GEO工具,事半功倍效果验证
优化·工具·geo·标题
江屿风19 天前
C++OJ题经验总结(竞赛)4
开发语言·c++·笔记·算法·dp·双指针
汉克老师21 天前
GESP6级C++考试语法知识(三十九、动态规划的启蒙(四、二维DP))
c++·动态规划·dp·gesp六级·二维dp
深念Y23 天前
DeepSeek/MiMo 推理链缓存代理:从内存到 SQLite 的两级缓存架构实战
数据库·缓存·架构·sqlite·内存·优化·分层
麦哲思科技任甲林1 个月前
软件开发中的三次法则
重构·ai编程·优化·重复·三次法则
洞察物理世界1 个月前
【SI_DP 03】深入理解DP信号Main Link
dp·硬件测试·dp2.0·接口一致性测试