dsy1010: [hnoi2008]玩具裝箱
【題目描述】
有n個數,分成連續的若干段,每段(假設從第
j個到第
i個組成一段)的分數為 (x-l)^2,
x為j-i+sigma(ck) i<=k<=j,其中l是乙個常量。目標:各段分數的總和最小。
【輸入格式】
第一行:兩個整數n,
l.下來
n個數字
ci.1<=n<=50000,1<=l,ci<=10^7
【輸出格式】
乙個整數,各段分數總和的值最小。
sample input
5 43 4 2 1 4
sample output
1維護乙個右下凸包。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8using
namespace
std;
910 typedef long
long
ll;11
const ll n=50010;12
ll n,l,nl,f[n],sum[n],s[n],q[n];
1314
//f[i]=a[i]*x[j]+b[j]
15//
ll=l+1
16//
a[i]=-2*(s[i]-ll)
17//
x[j]=s[j]
18//
b[j]=f[j]+s[j]^2
1920
double x(ll i)
21double y(ll i)
22double find_k(ll i,ll j)
2324
intmain()
2537
for(int i=1;i<=n;i++) s[i]=sum[i]+i;
38//
for(ll i=1;i<=n;i++) printf("%d ",sum[i]);printf("\n");
39//
for(ll i=1;i<=n;i++) printf("%d ",s[i]);printf("\n");
40 ll l=0,r=0
,j,ai,xj,bj,ti;
41double
k;42 memset(f,0,sizeof
(f));
43for(int i=1;i<=n;i++)
4455 printf("
%lld\n
",f[n]);
56return0;
57 }
bzoj1010 toy玩具裝箱 (斜率優化dp)
description p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1 n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號...
BZOJ1010 玩具裝箱toy(斜率優化)
p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1.n的n件玩具,第i件玩具經過壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時如果乙個一...
BZOJ 1010 玩具裝箱toy (斜率優化)
題目大意 將n個數分成若干組,並且每組的數在原陣列中應是連續的,每組會產生的代價為sum i sum j i j 1 m,m為已知的常數。求最小代價。題目分析 定義dp i 表示將前 i 個元素分好組後產生的最小代價,狀態轉移方程很顯然了 dp i min dp j sum i sum j i j ...