斜率優化DP 玩具裝箱

2021-06-05 06:42:22 字數 1397 閱讀 8476

[hnoi2008]玩具裝箱toy

time limit:1000ms memory limit:165536k

total submit:5 accepted:5

description

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。但他希望費用最小.

input

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

output

輸出最小費用

sample input

5 434

214

sample output

1

斜率優化,方程很簡單,優化也很簡單,懶得寫了。

對於這種題要注意兩個地方就好了。

1、雙端佇列的區間是什麼區間。比如說這裡是左閉右閉。首先入隊第乙個元素,r應該還是0。等等等。

2、方程係數分離之後如果要作除法,要注意不等號需不需要變號

#include #include const char fi = "toy.in";

const char fo = "toy.out";

const long maxn = 50010;

typedef long long ll;

long c[maxn];

ll sumpi[maxn];

ll sum[maxn];

long que[maxn];

ll l;

long n;

long l = 0;

long r = 0;

ll f[maxn];

inline ll calc(long j,long k)

inline int getint()

int main()

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

return 0;

}

玩具裝箱TOY 斜率優化DP

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

習題 玩具裝箱(斜率優化)

題目 傳送門 思路 首先考慮暴力,那麼設dp i 為以前i號元素的最小值 s i 為前i號元素的字首和 那麼轉移方程即為dp i min 顯然樸素的時間複雜度為o n 2 那麼我們化簡一下式子 設有兩個點a,b向i進行轉移,且a比b優 那麼dp a i a 1 s i s a l 2推導過程此處省略...

Luogu P3195玩具裝箱(斜率優化DP)

這題還是比較炫的 題目鏈結 我們設f i 是已經裝了前i個玩具,且第i個玩具是某箱子裡裝的最後乙個東西 廢話 那我們很輕鬆可以想到乙個轉移方程 for int i 1 i n i for int j 0 jj f i min f i f j squa sum i sum j i j 1 l 其中su...