這題可以說是斜率優化dp的模板題。
首先,我們先推推它的dp式:
f[i]=min;
這裡的c[i]表示的是原來的c[1~i]的和
然後我們假設k我們可以將c[i]再表示為c[1~i]+i,這樣就簡單很多了。
改改dp式:f[i]=min;
f[j]+(c[i]-c[j]-l-1)2
2我們用換元法,設x=c[j]-l-1,y=c[k]-l-1
f[j]+(c[i]-x)2
2f[j]+c[i]2-2 * c[i] * x +x2
2-2 * c[i] * y+y2
f[j]-f[k]+x2-y2
<2 * c[i] * (x-y)
f[j]-f[k]+x2-y2
<2 * c[i] * (c[j]-c[k])
(f[j]-f[k]+x2-y2)/(c[j]-c[k])<2*c[i]
上標:
#include
#define n 50010
#define db double
#define ll long long
using namespace std;
int n,l,g[n]
,len=
0,l=0;
ll c[n]
,f[n]
;db ii;
inline
intread()
inline ll sqr
(ll x)
db solve
(int x,
int y)
intmain()
;c[i]=c[1~i]+i
n=read()
,l=read()
;for
(int i=
1;i<=n;i++
) c[i]
=c[i-1]
+read()
;for
(int i=
1;i<=n;i++
) c[i]
+=i;
for(
int i=
1;i<=n;i++
)printf
("%lld\n"
,f[n]);
return0;
}
HNOI2008 玩具裝箱toy
重點在講斜率優化 description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1.n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一...
HNOI2008 玩具裝箱toy
dp i min dp j sum i sum j c 2 dp k sum i sum k c 2 dp k si sum k 2 dp k si 2 2 si sum k sum k 2 dp k sum k 2 dp j sum j 2 2 si sum k sum j yk yj 2 si ...
HNOI2008 玩具裝箱TOY
題目描述 p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1 n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時...