先来个华丽的出场~~
今天,蒟蒻仍在赶知识点的路上。昨天刚学过数位DP,今天又学了斜率优化,被爆锤了。
不扯淡了,现在就来写一下总结吧。
斜率优化,既然叫这个名字,那么,这个算法的性质其实就已经确定了:DP优化。
也就是说,它本身并不像树形DP或数位DP那样解决一些特定性质的问题的,而是类似于矩阵乘法那样,对于某些DP方程,加速地进行转移,以用来攻克一些给出的n较大时的情况。
学了斜率DP,你会发现,自己学了多年的数学终于!!!在此刻派上了用场。斜率DP,顾名思义,与平面几何,也就是我们所学的一次函数有关。斜率优化往往是用于一些具有递推性质的DP方程中去的。
如:
本题就是一道典型的斜率优化问题。首先,在写斜率优化题目的时候,最重要的一步并非优化,而是想出DP转移方程。优化可以没有,但没有转移方程,一定不行。
就如本题,若n的范围够小的话,我们可以双重循环枚举来搞。开一个f数组, f [ i ] f[i] f[i]表示将前 i i i个任务分组后的最小总费用。求 f [ i ] f[i] f[i],我们枚举 j ( 1 − ( i − 1 ) ) j( 1-(i-1) ) j(1−(i−1)),将 j − i j-i j−i分为一组,求最小总费用。
但是,很显然,本题的 n n n太大了, O ( n 2 ) O(n^2) O(n2)肯定过不去,这时,就要考虑斜率优化了。
考虑一下 f [ i ] f[i] f[i]的表达式: f [ i ] = f [ j ] + ( s u m c [ i ] − s u m c [ j ] ) ∗ s u m t [ i ] + s ∗ ( s u m c [ n ] − s u m c [ j
斜率优化(DP)
最新推荐文章于 2024-01-29 22:48:34 发布