#P5618. 「一本通 5.6 练习 4」打印文章

「一本通 5.6 练习 4」打印文章

题目描述

原题来自:HDU 3507

给出 NN 个单词,每个单词有个非负权值 CiC_i,现要将它们分成连续的若干段,每段的代价为此段单词的权值和的平方,还要加一个常数 MM,即 (Ci)2+M(\sum C_i)^2+M。现在想求出一种最优方案,使得总费用之和最小。

输入格式

包含多组测试数据,对于每组测试数据: 第一行包含两个整数 NNMM。 第二行为 NN 个整数。

输出格式

输出仅一个整数,表示最小的价值。

5 5
5 9 5 7 5
230

数据范围与提示

对于全部数据,0N5×105, 0M10000\le N\le 5\times 10^5,\ 0\le M\le 1000

dpi=min(dpi,dpj+(s[i]s[j])2+m)dp_i=min(dp_i,dp_j+(s[i]-s[j])^2+m)

对于 j<k<ij<k<i,如果 kkjj 要优,则满足 :

$$dp[k]+s[i]^2-2s[i]s[k]+s[k]^2+m ≤ dp[j]+s[i]^2-2s[i]s[j]+s[j]^2+m $$

消去一样的可得

dp[k]2s[i]s[k]+s[k]2dp[j]2s[i]s[j]+s[j]2dp[k]-2s[i]s[k]+s[k]^2 ≤ dp[j]-2s[i]s[j]+s[j]^2

移项可得

dp[k]+s[k]2dp[j]s[j]22s[i](s[k]s[j])dp[k]+s[k]^2-dp[j]-s[j]^2 ≤ 2s[i](s[k]-s[j])

所以可知当 j<k<i,dp[k]+s[k]2dp[j]s[j]22s[i](s[k]s[j])j<k<i,dp[k]+s[k]^2-dp[j]-s[j]^2 ≤ 2s[i](s[k]-s[j])kkjj 优。

Slope(j,k)\text{Slope}(j,k) 表示 $\text{Slope}(j,k)=\cfrac{(dp[k]+s[k]^2)-(dp[j]+s[j]^2)}{2s[i](s[k]-s[j])}$

Slope(j,k)Slope(k,i)\text{Slope}(j,k)\ge \text{Slope}(k,i)kk 就没用了