BZOJ 1010 玩具裝箱

2021-07-09 18:33:05 字數 3187 閱讀 7643

預處理字首和su

mi=∑

j=1i

ai,為區間求和作準備。

這顯然是dp。 設f

i 表示前

i 件玩具花的最小費用。

則有:

①邊界條件:f0

=0; ②動態轉移方程:fi

=min

(fj+

(i−j

−1+s

umi−

sumj

−l)2

) ;

③答案:fn

。直接求解,時間複雜度為o(

n2) ,顯然會tle。

考慮斜率優化

原來的方程太複雜了,我們先化簡一下。

通過換元法化簡動態轉移方程,將參量、變數、常量分離。 記g

i=i+

sumi

,gj=

j+su

mj,c

=1+l

, ∴f

i=mi

n(fj

+(gi

−gj−

c)2)

求解斜率方程

為了加快求解,我們設法盡可能多的排除一些狀態,這需要決策點之間的比較,我們要找出決策點比較的式子。

設當前要求fi

,存在決策點k,

j ,

k>

j ,滿足決策

k 優於決策j。

∴fk+

(gi−

gk−c

)2≤f

j+(g

i−gj

−c)2

∴fk+(−g

k−c)

2+2g

i(−g

k−c)

≤fj+

(−gj

−c)2

+2gi

(−gj

−c)

∴fk+

(gk+

c)2−

fj−(

gj+c

)2≤2

gi(g

k−gj

) ∵k

>j,

sumk

>su

mj ∴

k+su

mk>j+

sumj

即gk>gj

∴slope(

k,j)

=fk+

(gk+

c)2−

fj−(

gj+c

)2gk

−gj≤

2gi

不難發現,

k 和

j可以看做兩個定點,不因

i 的改變而改變: (f

k+(g

k+c)

2,gk

)和(f

j+(g

j+c)

2,gj

) 。

近一步,∀i

∈n+ ,決策點

i 可以表示為平面上的點(f

i+(g

i+c)

2,gi

)。對於∀

k,j∈

n+,k

>

j , ①當s

lope

(k,j

)≤2g

i 時,決策點

k 優於決策點j;

②當slo

pe(k

,j)>2g

i 時,決策點

k 劣於決策點j。

可以將問題轉化為平面上的點的問題

現在問題轉化為:

給定平面上

n 個在橫縱座標都單調遞增的點,給定乙個斜率

k,支援以下三種操作:

①插入點操作: 在第n

個點(x

n,yn

)的末尾增加乙個點n+

1 ,也滿足xn

+1>xn

,yn+

1>yn

; ②詢問點操作:

在點集x

= 中尋找乙個點

i ,使得經過

i斜率為

k 的直線在其他所有點之下;

③更改k

操作: 將k

變成k′

,滿足k

′>

k 。

要尋找的點

i ,很明顯

i在點集的下凸殼。

又由於k

是不斷增大的,所以凸殼上要找的點

i的橫座標也在不斷增大。

我們只需要維護乙個單調佇列即可。

隊首維護:

隊首的點為

a ,b,若

slop

e(b,

a)≤2

gi,則將隊首往後移一位;

隊尾維護:

隊末三個點為

a ,b,

c 。 若s

lope

(a,b

)>sl

ope(

a,c)

,則將b

移出隊。

每個點進隊一次,出隊一次。

所以總的時間複雜度為o(

n),空間複雜度也為o(

n)。總算徹底弄清斜率優化的嚴謹過程了。

#include 

#include

typedef long long lint;

const int n=65536;

int n,l;

int c[n];

lint sum[n];

lint g[n];

lint c;

lint f[n];

lint x[n];

lint y[n];

intq[n];

int qh,qt;

inline int read(void)

inline double slope(int i,int j)

int main(void)

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

return

0;}

bzoj 1010 玩具裝箱

題目大意 有n個數,分成連續的若干段,每段 假設從第j個到第i個組成一段 的分數為 x l 2,x為j i sigma ck i k j,其中l是乙個常量 使各段分數的總和最小 思路 斜率優化dp入門題 寫出dp方程之後用單調佇列維護凸包即可 1 include2 include3 include4...

BZOJ1010 玩具裝箱toy

1010 hnoi2008 玩具裝箱toy time limit 1 sec memory limit 162 mb submit 7631 solved 2924 description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任...

BZOJ1010玩具裝箱Toy

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