题目描述
在遥远的未来,人类建立了一个由 N 个空间站组成的线性网络。为了维持空间站的运行,需要从第 1 号空间站向第 N 号空间站传输能量。
每个空间站 i (1≤i≤N) 拥有一定的基础能量值 Ai。当能量从空间站 i 传输到空间站 j (i<j) 时,除了需要支付固定的传输成本 Ci,j 外,还需要消耗一定的能量。
具体规则如下:
- 定义前缀和 Si=∑k=1iAk。
- 从空间站 i 传输到空间站 j (i<j) 的能量消耗为 (Sj−Si)2。
- 固定传输成本 Ci,j 由公式 K⋅(j−i) 给出,其中 K 是一个给定的常数。
你需要将网络划分为若干个连续的区间,使得能量从第 1 号空间站出发,经过一系列跳跃最终到达第 N 号空间站的总消耗最小。
设 f[i] 表示能量到达第 i 号空间站时的最小总消耗。
显然 f[1]=0。
对于 j>1,状态转移方程为:
$$f[j] = \min_{1 \le i < j} \left( f[i] + (S_j - S_i)^2 + K \cdot (j - i) \right)$$
请计算 f[N] 的值。由于答案可能很大,请对 109+7 取模后输出。
注意:SN 可达 1014,(Sj−Si)2 可达 1028,比较大小时必须使用未取模的精确值(如 __int128),只在最后输出时取模。
输入格式
第一行包含两个整数 N 和 K,分别表示空间站的数量和固定传输成本系数。
第二行包含 N 个整数 A1,A2,…,AN,表示每个空间站的能量值。
数据范围与提示
对于 100% 的数据:
- 2≤N≤105
- 1≤K≤109
- 1≤Ai≤109
提示:
- 观察状态转移方程,发现其具有斜率优化的特征。
- 可以将方程展开为关于 Sj 的线性函数形式,利用单调队列维护凸包。
- 注意 Ai 为正数,因此前缀和 Si 是严格单调递增的,这保证了决策点的单调性。
样例
4 2
1 2 3 4
35
样例解释
S=[1,3,6,10]。最优方案是逐站传输 1→2→3→4:
- 1→2:(3−1)2+2×1=6
- 2→3:(6−3)2+2×1=11
- 3→4:(10−6)2+2×1=18
总消耗 6+11+18=35。其他方案均不更优,例如 1→3→4 为 29+18=47,1→4 为 87。