P3195 HNOI2008 玩具裝箱TOY

2022-05-20 20:34:13 字數 1579 閱讀 4709

紀念不看題解\(a\)掉的第乙個斜率優化dp:p3195 [hnoi2008]玩具裝箱toy

乙個月後補的重點:斜率優化的本質就是利用推出來的公式決定維護乙個凸包,用單調佇列來維護這個凸包,因為我們假定\(jdp_k\),所以每次決策顯然就取隊頭,從而得到最優解

定義陣列\(sum_i\)為長度字首和,陣列\(dp_i\)為前\(i\)個玩具的最小花費

當前塊末\(i\)與前一塊末\(j\)狀態轉移為\(dp_i=dp_+i-(j+1)+sum_i-sum_j-l\)

假設\(j,從\(k\)轉移比\(j\)轉移更優:

\(dp_j+[i-(j+1)+sum_i-sum_j-l]^2>\)

\(dp_k+[i-(k+1)+sum_i-sum_k-l]^2\)

\(\longrightarrow\)

\(dp_j+[(i+sum_i-l)+(-j-1-sum_j)]^2>\)

\(dp_k+[(i+sum_i-l)+(-k-1-sum_k)]^2\)

\(\longrightarrow\)

\(dp_j+(i+sum_i-l)^2+2(i+sum_i-l)(-j-1-sum_j)+(-j-1-sum_j)^2>\)

\(dp_k+(i+sum_i-l)^2+2(i+sum_i-l)(-k-1-sum_k)+(-k-1-sum_k)^2\)

\(\longrightarrow\)

\(dp_j+2(i+sum_i-l)(-j-1-sum_j)+(-j-1-sum_j)^2>\)

\(dp_k+2(i+sum_i-l)(-k-1-sum_k)+(-k-1-sum_k)^2\)

\(\longrightarrow\)

\(dp_j-dp_k+(-j-1-sum_j)^2-(-k-1-sum_k)^2>\)

\((i+sum_i-l) \\)

\(\longrightarrow\)

\(\dfrac>i+sum_i-l\)

:然後你就會樣例都過不了,為什麼?根據單調性\(2[(-k-1-sum_k)-(-j-1-sum_j)]\)為負,符號要變,所以最後的式子為

\(\dfrac

\(i+sum_i-l\)單調遞增,所以我們用單調佇列維護上凸包

#includeusing namespace std;

typedef long long ll;

const ll maxn=200000;

inline ll read()

while(c>='0'&&c<='9')

x=(x<<3)+(x<<1)+c-'0',c=getchar();

return x*f;

}ll n,l,head,tail;

ll sum[maxn],dp[maxn],q[maxn];

inline double get(ll i)

inline ll p_(ll x)

inline double xl(ll j,ll k)

int main()

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

return 0;

}

P3195 HNOI2008 玩具裝箱TOY

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

P3195 HNOI2008 玩具裝箱 題解

p3195 hnoi2008 玩具裝箱 一道比較模板的斜率優化題目 先寫出轉移方程 f i 表示前 i 個已經裝箱完畢的最優解,s i 表示前 i 項 c i 1 的和,f i f j s i s j l 1 2 j i 用 l 1 代替 l 比較好處理,於是方程變成 f i f j s i s j...

洛谷P3195 HNOI2008 玩具裝箱TOY

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