bzoj1010 toy 斜率優化入門模板

2022-05-31 07:48:14 字數 1362 閱讀 7002

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 #include8

using

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 ...