sb的斜率優化筆記

2022-02-08 22:34:20 字數 1357 閱讀 1865

參考資料

[hnoi2008]玩具裝箱

設 s[i] = σ1≤i≤n (c[i] + 1), 設狀態 dp[i] 表示裝好前 i 個, 值為最小花費, 則轉移為:

dp[i] = min0≤j 。

化簡 (s[i]-s[j]-1-l)2 :將常量 l 加一, 變成 (s[i]-s[j]-l)2, 而後變成 s[i]2 + (s[j] + l)2 - 2s[i]s[j] - 2s[i]l。

最後方程化簡為 :dp[i] = min0≤j , 是 dp[i] = min/max 的形式。

看上去很 nb 的代數法

考慮 dp[i] 的兩個決策點 j1

< j2, 假設 j2 優於 j1, 可得:

(-2s[i]s[j2]) + (dp[j2] + (s[j2] + l)2) ≤ (-2s[i]s[j1]) + (dp[j1] + (s[j1] + l)2)

繼續化簡:

-2s[i] (s[j2] - s[j1]) ≤ (dp[j1] + (s[j1] + l)2) - (dp[j2] + (s[j2] + l)2)

由於 s[j2] > s[j1], 故可除:

2s[i] ≥ \(\dfrac\)

若有 j2 > j1, 就可以通過判斷這個東西是否成立來判斷 j2 這個決策點是不是優於 j1 這個決策點。

然後設 x(i) = s[i], y(i) = dp[i] + (s[i] + l)2, 再設 p(i) = (x(i), y(i)) (平面直角座標系上的乙個點), 問題就是在平面直角座標系上的乙個斜率判定問題。

考慮乙個只有三個點的上凸包, 可知不論怎樣,用上面那個結論可觀測到的有效決策集合是原決策集合的下凸包。具體推理見參考資料

線性規劃法

複習下形式:dp[i] = min/max

這種線性規劃法就是把某個決策點 j 的轉移,即 dp[i] = a(i) + b(j) + c(i) × d(j), 在某個來自西方的神秘二維結構(即平面直角座標系)上以某種方式展開, 然後轉化為在這個二維結構上的最優化問題。

具體地, 先將除了 dp[i] 的東西以 ' 標示之, 記為常量:

dp[i] = a(i)' + b(j) + c(i)' × d(j)

然後將式子化成:

b(j) = -c(i)' × d(j) - a(i)' + dp[i]

然後現在的問題就是將所有決策點看成 (d(j),b(j)), 然後把乙個斜率為 -c(i)' 的直線對齊每個點, 找出最小的截距。

發現上凸包是不存在的, 維護決策點的下凸包即可。

兩種方法的評價

線性規劃 >>> 代數法,降維打擊!

斜率優化dp筆記

瞎扯 演算法真的是無止境,從暴力到dp原本以為很神奇了,沒想到還能優化dp,而且是把o n 2 變成o n 真是無 說。引入 我們來分析這麼乙個問題,給你n個數,要你把他們分成連續的若干塊,使得讓他們的每段和的平方加起來最小.正常我們會想到的就是o n 2 的dp,方程就是 dp i min dp ...

學習筆記 斜率優化

斜率優化入門題 設 f x 為 f x 的後綴和,t x 為 t x 的字首和。dp i 表示完成到第 i 任務的最小代價,轉移 dp i min 拆掉 我們發現只和 j 相關的可以直接預處理,現在的問題是確定了 i 如何快速找到乙個 j 令 y j dp j f j 1 times s t j x...

學習筆記 斜率優化

太久沒碰過這個玩意了,於是它就變成學習筆記了。一般來說,斜率優化的dp會比其它的dp得到轉移方程要簡單一點點。通式大概是 f i a i b j c i d j 也就是說,這種dp和單調佇列不同的一點是有同時和 i,j 有關的項,這時候就需要用到斜率優化。拿道題目來講可能效果更好一些。設字首和為 s...