斜率优化

发布时间 2023-07-27 14:39:23作者: 星河倒注

part 1 引入


一.斜率优化的作用

在一个dp中,往往转移一个状态与很多状态相关,每一次转移都扫一遍与它相关的状态浪费了很多时间。但总有一些状态无法转移到它之后的状态,这时考虑转移它们就没有意义。我们用一些数据结构来维护有意义的状态从而节省时间。

二.斜率优化的使用限制

1.满足答案单调:
只有答案单调才能确认当前相对更优(后文会阐述两个状态如何确定一个比另一个更优)的状态转移以后仍然相对更优。

2.dp是一维的:
维护斜率优化的数组,队列......(任何你能想出来,付诸实践的数据结构)二维以上不好写(这意味着你必须把dp优化成一维)

3.必须满足以下形式(斜率优化前从状态j推到状态i):
dp[i] = min / max ( dp[i] , A * dp[j] + i与j的乘积项 + c)

对第3条的解释

(1)min / max 可以理解为满足单调性;

(2)A , c 为常数;

(3)i与j的乘积项的作用是为下文的拆解推导提供条件(非常重要)