HNOI2008 玩具裝箱toy

2022-05-13 09:51:11 字數 2225 閱讀 9788

bzoj1010

斜率優化dp首題,多寫一點吧。

設\(f_i\)為\(i\)點時的最優方案,\(s_i\)為\(i\)點\(c_i\)字首和,則有\(f_i = min\\)。

不要被這個「決策單調性」給唬住,其實就是證明:若在計算\(f_i\)的時候,選\(j\)比選\(k\)好,那麼之後永遠都有選\(j\)比選\(k\)好。

證明:首先設\(t_x = s_x+x,c = l+1\)且\(j > k\),選\(j\)比選\(k\)好,簡化之後的表示

\(f_j+(t_i-t_j-c)^2 < f_k + (t_i-t_j-c)^2\)

\(\leftrightarrow f_j+t_i^2+t_j^2+c^2-2t_it_j+2t_jc-2t_ic < f_k+t_i^2+t_k^2+c^2-2t_it_k+2t_kc-2t_ic\)

\(\leftrightarrow f_j+t_j^2-2t_it_j+2t_jc - f_k - t_k^2 + 2t_it_k - 2t_kc < 0\)

\(\leftrightarrow f_j + t_j^2+ 2t_jc - f_k - t_k^2 - 2t_kc < 2t_it_j - 2t_it_k\)

由於\(t\)是單調上公升的,所以\(2t_j-2t_k>0\),所以

\(\mbox\leftrightarrow \displaystyle\frac < t_i\)

又因為\(t\)是單調上公升的,所以一旦滿足了這個條件,選\(j\)永遠比選\(k\)好。

這一步其實就是看分子分母,化出和\(j\),\(k\)有關的式子,就可以了。

設\(f_x = t_x^2+f_x+2ct_x\),\(g_x=2t_x\)

則原式可化成\(\displaystyle\frac,由於\(g\)單調增,不等號左邊的式子(上下同乘\(-1\)後)就是在平面\(gof\)上的一條直線\((k,j)\)的斜率(記為\(k_\))。

設\(x, y, z\)滿足\(x < y < z\),且\(k_>k_\),則選\(y\)不可能更優。

證明:考慮反證法,若\(y\)優於\(x\)和\(z\),則有:

\(\displaystyle\frac>t_i\)(這個式子其實是將step2中的\(j>k\)反過來推出來的)

和\(\displaystyle\frac

即\(k_=\displaystyle\frac>\displaystyle\frac=k_\)與題設矛盾。

這裡應該先考慮\(y\)優於\(x\)和\(z\),推出式子後得出斜率的單調結論。

單調佇列是乙個雙端佇列。

由於step2,3,若在\(i\)處有\(k_(\(k, j\)位於隊首),則應該令\(k\)出隊,反覆執行直至佇列中只有乙個元素或不滿足條件為止,此時隊首即為決策。

當計算出\(f_i\)後,利用step4的結論,在隊尾不斷出隊直至直至佇列中只有乙個元素或不滿足條件為止,並將\(i\)放入隊尾。

#include #include typedef long long ll;

const int n = 50000 + 10;

const double eps = 1e-10;

int n, l;

ll c[n], f[n], s[n], t[n], c, f[n], g[n];

int q[n], qhd, qtl;

inline double k(int x, int y)

inline int dcmp(double x)

int main ()

// dp

f[0] = 0;

q[qtl++] = 0;

for (int i = 1; i <= n; ++i)

int j = q[qhd];

f[i] = f[j] + (t[i] - t[j] - c) * (t[i] - t[j] - c);

f[i] = t[i] * t[i] + f[i] + 2 * c * t[i]; // mark

while (qhd < qtl - 1)

q[qtl++] = i;

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

return 0;

}

這個題是我寫的斜率優化dp的第一題,感覺斜率優化很模板化,只需要一點點推就行了,要注意的一點是斜率優化的複雜度\(o(n)\)的,另外,演草時要好好寫字,否則真的會看不清...(例如mark處我一開始寫的是+t[i]

HNOI2008 玩具裝箱toy

重點在講斜率優化 description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1.n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一...

HNOI2008 玩具裝箱toy

dp i min dp j sum i sum j c 2 dp k sum i sum k c 2 dp k si sum k 2 dp k si 2 2 si sum k sum k 2 dp k sum k 2 dp j sum j 2 2 si sum k sum j yk yj 2 si ...

HNOI2008 玩具裝箱TOY

題目描述 p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1 n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時...