bzoj1010 玩具裝箱toy 斜率優化dp

2021-07-24 14:54:36 字數 1066 閱讀 9975

ac通道:

【題解】

看到題很容易想到動態規劃。

用f[i]表示裝前i個玩具所需的費用,sum陣列維護字首和。

狀態轉移方程:f[i]=min  (0

如果在維護字首和時令sum[i]=sum[i-1]+a[i]+i, 設c=l+1

那麼則有:f[i]=min  (0

如果拆開平方就會出現sum[i]*sum[j]這樣的項,那麼我們考慮斜率優化。

假設k~i比j~i更優,則f[k]+sum[i]^2+sum[k]^2+c^2-2sum[i]sum[k]-2c*sum[i]-2c*sum[k]

化簡得:(f[k]-f[j]+sum[k]^2-sum[j]^2)/(sum[k]-sum[j])<2(sum[i]-c)

這就是斜率表示式了,接下來就是套路。。。。。。

注意用long long,否則會爆掉。(被這個坑了,一直wa)

/**************

bzoj 1010

by chty

2016.11.14

**************/

#include#include#include#include#include#include#includeusing namespace std;

long long n,l,c,a[50010],sum[50010],q[50010],f[50010];

inline int read()

while(isdigit(ch))

return x*f;

}double slop(int x,int y) //計算斜率

int main()

{ n=read(); l=read(); c=l+1;

for(int i=1;i<=n;i++) a[i]=read();

for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];

for(int i=1;i<=n;i++) sum[i]+=i;

int l=0,r=0;

for(int i=1;i<=n;i++)

{while(l

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教授要求在乙個一維容器中的玩具編號是連續的。同時如果...

BZOJ1010 玩具裝箱toy

題目鏈結 bzoj1010 題目大意把n 個數分成若干段,從i到 j 分為一段的花費co st i j jk iva l k j i 求最小花費。分析 1.斜率優化dp,dp i min dp j co st j 1 i 2.先把l 1 設f x xk 1 val k x ff x d p x f ...