BZOJ 1010 斜率優化dp

2022-03-04 08:43:17 字數 1039 閱讀 2405

題意:n個玩具,每個長度ci,要把他們都放到容器中。如果同一容器中放多個玩具,這些玩具必須編號連續,且相鄰兩個玩具之間要加乙個長度為1的填充物。如乙個容器長度為x,其製作費用為(x-l)^2,(l是給出的常數),問總費用最少多少。

tags:還是沒搞懂,看神犇**強行敲的。。

大概理解:斜率優化是針對有f[i]=f[j]*x[i],不能用單調佇列優化的情況,可以使複雜度從o(n^2)降到o(n)。類似凸包的graham,利用斜率維護乙個單調佇列。但單調性和怎麼求斜率搞不懂==

這題很容易想到dp[i]=min(dp[j]+(sum[i]-sum[j]+i-j-1-l)^2),但1e5必須要優化。最後不知道怎麼就變到了

率方程(dp[k]+(f[k]+c)^2-dp[j]-(f[j]+c)^2)/2*(f[k]-f[j])<=f[i],然後f[i]遞增,用單調佇列維護乙個下凸殼。如斜率(q[r],i)《斜率(q[r-1],q[r])時,隊尾就是無效的,將其彈出。

#includeusing

namespace

std;

#pragma comment(linker, "/stack:102400000,102400000")

#define ff(i,a,b) for (int i=a;i<=b;i++)

#define f(i,b,a) for (int i=b;i>=a;i--)

#define mes(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3ftypedef

long

long

ll;const

int n = 5e4+10

;int

n, l, c, c[n], q[n];

ll s[n], f[n];

double slo(int j, int

k)void

dp()

}int

main()

BZOJ 1010 斜率優化dp

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

玩具裝箱 bzoj1010 斜率優化

斜率優化的題好像都是這樣的方程 左邊關於j,k的乙個 的式子,右邊是個只與i有關的可算的數字 然後把它放到二維座標軸上,用單調佇列維護乙個凸殼,o n 的複雜度 這道題但是我發現我wrong了,找了程式看了一下,才發現斜率優化還有一點沒理解 才明白上午t2能a是由於資料太水,出題人萬歲!1 incl...

BZOJ1010 玩具裝箱toy(斜率優化)

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