斜率優化學習筆記

2022-03-26 01:27:40 字數 2883 閱讀 4264

目錄第二類斜率優化

注意事項(q/a)

例題 : hnoi玩具裝箱

由題意我們可以馬上得到dp方程:

\[dp(i)= \displaystyle \min_\

\\sum(x) 為字首和

\]很可惜, 這個解法是\(o(n^2)\)的, 無法ac (但是可以在當年騙很多分?)

接下來的文章中我們會用幾個簡稱

\[f(i) = sum(i)+i \\

c = 1+l

\]優化dp的思路有兩種 :

我們無法再進行第一種優化了(方程是\(1d/1d\)的), 所以只能進行第二種優化

考慮i的兩個決策點j,k, 其中j < k

如果k優於j, 那麼

\[dp(k) + (f_i-f_k-c)^2 < dp(k)+(f_i-f_j-c)^2\\

左邊整理得 dp_k+ (f_i^2-2f_i(f_k+c)+(f_k+c)^2)\ \ , 右邊同理

\\令y_k = dp_k +(f_k+c)^2, x_k = f_k+c\\

再次整理得 \frac < 2f_i

\]這不就是斜率的代數式嗎?

注意, 在此處用到了乙個性質: 對於k>j,x(k) - x(j) > 0

也就是dp(k) > dp(j)

這是第一類斜率優化的必要條件, 該題中可通過 打表 得知.

記住, 我們現在得到的結果是:

當\(j時, 若滿足$ \frac \leq 2f_i$ , 則 決策k優於決策j, 否則決策j 優於決策 k.

之後的文章裡,"決策k優於決策j"簡寫為k b j.

通過這個結果, 我們可以得知:可選決策的集合斜率單調遞增, 形成乙個下凸殼.

為什麼? 下面是證明:

\(設有3個決策x, y, z, 其中x

$如果 hyp(x, y) > hyp(y, z) , 那麼y不可能是最優決策點. $

分兩種情況討論:

1: hyp(x, y) > 2*f(i)

該情況不滿足上述不等式, 得到x b y. 排除y.

2: hyp(x,y) < 2*f(i)

該情況滿足上述不等式, 得到y b x.

但是由於 \(hyp(x, y) > hyp(y, z)\), 所以推出\(hyp(y, z) < 2*f(i)\), 得到z b y

綜上, y必定會被排除.

我們知道了可選決策集合, 那麼怎麼快速得知最優決策呢?

思考凸殼的性質.

可以得知在凸殼上必定有一點 y 它的前驅是x, 後繼是z, 其中\(hyp(x,y) < 2*f_i < hyp(y,z)\)

那麼可以得知**y b x, y b z **

二分斜率 \(2f_i\)即可. (請讀者自己思考全體斜率大於/小於\(2f_i\)的情況)

如何維護最優決策呢?

直接按照graham掃瞄法用單調棧\(o(n)\)維護凸殼即可.

複雜度\(o(n\ logn)\)

**呼之欲出.

#includeusing namespace std;

inline int read()

#define ld long double

#define int long long

const int maxn = 5e4+5;

int dp[maxn], sum[maxn];

int n, l;

inline int v1(int p)

inline int sqr(int x)

//hypotenuse

int v2;

inline ld hyp(int a, int b)

int q[maxn*2], l, r;

void solve()

}signed main()

solve();

printf("%lld\n", dp[n]);

return 0;

}

題目: noi2007 貨幣兌換

該題斜率方程不滿足性質 : 對於k>j,x(k) - x(j) > 0

看的出來這是乙個二維偏序模型, 可用cdq分治維護凸殼.

蒟蒻寫掛了, 求神犇指教.

q: 什麼時候可以用斜率優化?

a: 1d/1d方程, 決策單調不等式左邊像個斜率, 右邊 hyp 只與 \(i\) 有關

"像個斜率"意味著不等式左邊不一定是$\frac $, 也可以是 \(\frac \)

畢竟在證明的過程中, 我們沒有用到任何斜率的性質, 一直是在推不等式 , 對吧?

q: 怎麼推式子?

a: 記住決策不等式前提是:k>j, 意義是:

當\(j時, 若滿足$ \frac (\leq或\geq ) hyp$ , 則 決策 k 優於決策 j , 否則決策 j 優於決策 k .

q: 維護上/下凸殼?

a: 上式為大於號時 維護上凸殼, 為小於號時維護下凸殼.

dp打表要打 2 個值:

斜率優化 學習筆記

前言 寒假yousiki講過斜率優化,但完全沒有聽懂。現在文化課解析幾何也學了不少,終於能做一些題了。有時候我們列出dp方程會得到形如這樣的式子 f i max min w i 1 leq j我們變換一下形式 2 a i b j f i a i 2 w i f j b j 2 仔細一看,上面的等式可...

斜率優化 學習筆記

事實上斜率優化是專門用來處理這樣一類 dp 式子的 dpi ai maxj 1i 1 bj cj basei 窩萌嘗試把上式中的 bj cj 和 basei 等價成 xj yj 和 ki 並把它們丟到乙個平面上,然後它萌就會變成一堆點 xj,yj 畫一條過他們的直線,類似於 y yj ki x xj...

斜率優化學習筆記

斜率優化是 dp 的一種有力優化方式。常用於處理當 dp 方程 f i max f j val i,j 中 val i,j 出現同時關於 i j 的項,而無法直接單調佇列優化的情況。考慮這麼乙個問題 顯然的 dp 問題。令 f i 為以 i 為某一段的結尾,前面總得分的最大值。顯然我們有狀態轉移方程...