BZOJ1010單調性DP優化

2022-06-13 17:30:16 字數 1158 閱讀 8314

time limit: 1 sec  memory limit: 162 mb

submit: 10707  solved: 4445

[submit][status][discuss]

p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓

縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1...n的n件玩具,第i件玩具經過

壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時如果乙個一維容

器中有多個玩具,那麼兩件玩具之間要加入乙個單位長度的填充物,形式地說如果將第i件玩具到第j個玩具放到一

個容器中,那麼容器的長度將為 x=j-i+sigma(ck) i<=k<=j 製作容器的費用與容器的長度有關,根據教授研究,

如果容器長度為x,其製作費用為(x-l)^2.其中l是乙個常量。p教授不關心容器的數目,他可以製作出任意長度的容

器,甚至超過l。但他希望費用最小.

第一行輸入兩個整數n,l.接下來n行輸入ci.1<=n<=50000,1<=l,ci<=10^7

輸出最小費用

5 4342

141線性的dp關係式為 dp[i]=min

顯然超時,考慮優化。

假設i選擇時有k優於j(k>j 之所以選k大於j的原因是從前往後掃,考慮後面優於前面是否可以捨棄前面的);

1:首先證明滿足單調性(換句話說就是對乙個當前的i來說,如果k優於j,那麼i之後k都優於j)

有dp[k]+(sum[i]-sum[k]+i-k-1-l)^2

則有dp[k]+(f[i]-f[k]-c)^2

要證對於任意t>i 均有dp[k]+(f[t]-f[k]-c)^2

2:利用這個結論

若是利用這個結論條件肯定得先滿足吧 所以有dp[k]+(f[i]-f[k]-c)^2

即在從前向後掃瞄的過程中 只要滿足(1)式,就可以去掉隊首,若去不掉就將隊首作為中介進行運算(這是第乙個while所在)

其次,若是將乙個元素新增到佇列中,必須要將其和原倒數第乙個進行比較,若其優於倒數第乙個,則將其替換掉(第二個while),這個的意義所在是防止出現 中優,次優,最優這種佇列排序,如果沒有while的話,計算時只能選取乙個中優的而不是最優的(這個是第乙個while不能去掉的)具體**實現請移步

BZOJ1010 玩具裝箱 DP決策單調性

題目這裡 首先可以得到方程 f i max 顯而易見該方程具有單調性,因此可以使用決策單調性優化,維護乙個下凸殼,每次將當前隊首決策取出直至當前決策為最優,然後將當前點加入隊尾,若有斜率小於當前點的則先取出後加入。user small language c problem no.1010 inclu...

BZOJ 1010 斜率優化dp

題意 n個玩具,每個長度ci,要把他們都放到容器中。如果同一容器中放多個玩具,這些玩具必須編號連續,且相鄰兩個玩具之間要加乙個長度為1的填充物。如乙個容器長度為x,其製作費用為 x l 2,l是給出的常數 問總費用最少多少。tags 還是沒搞懂,看神犇 強行敲的。大概理解 斜率優化是針對有f i f...

BZOJ 1010 斜率優化dp

time limit 1 sec memory limit 162 mb submit 10700 solved 4440 submit status discuss p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓 縮,其可以將任意物品變成一堆,再放...