1. 程式人生 > >【HNOI2008】玩具裝箱TOY & 斜率優化學習筆記

【HNOI2008】玩具裝箱TOY & 斜率優化學習筆記

ali ora 但是 times 解析 begin 常數 自己 學習筆記

題目

P教授要去看奧運,但是他舍不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。P教授有編號為 \(1\cdots N?\)\(N?\) 件玩具,第 \(i?\) 件玩具經過壓縮後變成一維長度為 \(C_i?\) .為了方便整理,P教授要求在一個一維容器中的玩具編號是連續的。同時如果一個一維容器中有多個玩具,那麽兩件玩具之間要加入一個單位長度的填充物,形式地說如果將第 \(i?\) 件玩具到第 \(j?\) 個玩具放到一個容器中,那麽容器的長度將為 \(x=j-i+\sum\limits_{k=i}^{j}C_k?\)

制作容器的費用與容器的長度有關,根據教授研究,如果容器長度為 \(x?\) ,其制作費用為 \((x-L)^2?\) .其中 \(L?\) 是一個常量。P教授不關心容器的數目,他可以制作出任意長度的容器,甚至超過 \(L?\) 。但他希望費用最小.

\(0\le n \le 5\times 10^4\)

分析

\(f_i\) 代表前 \(i\) 個玩具的最小費用。

顯然有:
\[ f_i = \min_{j=0}^{i-1} \{f_j + (i - j - 1 + S_i - S_j - L)^2\} = \min_{j=0}^{i-1} \{f_j + (i + S_i - j - S_j - 1 - L)^2\} \]


其中,\(S_{i} = \sum_{j=0}^i C_j?\).

使用換元法,將只與 \(i\)\(j\) 有關的項提取出來。(常數項無所謂)

\(A_i = i + S_i\), \(B_i = A_i + L + 1\).

則有:
\[ f_i = \min_{j=0}^{i-1} \{f_j + (A_i - B_j)^2\} = \min_{j=0}^{i-1} \{f_j + B_j^2 - 2A_iB_j\} + A_i^2 \]

對於決策 \(j\) ,設:
\[ b = f_j + B_j^2 - 2A_iB_j \]
最優的 \(j\) 就是使 \(b\) 最小的 \(j\)

.

移項得:
\[ f_j + B_j^2 = 2A_iB_j + b \]
發現這個式子非常眼熟,設 \(k = 2A_i, y = f_j + B_j^2, x = B_j?\).

就變成了直線的解析式:\(y = kx + b?\)

而這個式子中,對於所有的決策,斜率 \(k?\) 都是常量,我們需要找到一個 \(j?\) 使得截距最小。

對於每一個決策 \(j?\) 都給出了一個點 \(P_j(B_j, f_j + B_j^2)?\),問題就轉換成了:已知若幹個點和斜率(\(k>0?\)),求過這些點之中一個且斜率為給定值的直線中截距最小的一個

技術分享圖片

考慮這樣一條不斷向上移動的直線,當它不斷上移時截距越來越大,直到它碰到第一個點為止,這個點就是使截距最小的點。

引理1:若候選決策連線段的斜率必然遞增

證明:\(j\) 要是 \(i\) 時最優決策,它必須滿足:
\[ \forall i>k\not =j\quad f_j + B_j^2 - 2A_iB_j\ < f_k + B_k^2 - 2A_iB_k \]
即:
\[ \begin{align*} 2A_i(B_j + B_k) & < f_k + B_k^2 - f_j - B^2_j \ 2A_i & < \frac{f_k + B_k^2 - (f_j + B^2_j)}{B_j + B_k} \end{align*} \]
我們發現,這就是 \(P_jP_i\) 的斜率 \(> 2A_i?\).

\(2A_i\) 就是我們不斷上移的直線的斜率 \(k?\).

技術分享圖片

所以,若 \(B\) 可能是最優決策點,則另外一個可能的最優決策點 \(C\) 必然在直線 \(y = kx + b\) 的左側而非右側。

【HNOI2008】玩具裝箱TOY & 斜率優化學習筆記