目錄第二類斜率優化
注意事項(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 為某一段的結尾,前面總得分的最大值。顯然我們有狀態轉移方程...