首先最大值处一定是直接停下来的,所以可以断环成链,a1,an+1 处为最大值。
设 f(i) 表示当前在 i 的答案,f(1)=f(n+1)=a1。
f(i)=max(ai,2f(i−1)+f(i+1)−bi)
接下来的都是没见过的套路:首先先把 −bi 搞掉,解决办法是两边同时减去一个修正值 ci。
令 F(i)=f(i)−ci,vi=ai−ci。
F(i)=max(vi,2F(i−1)+F(i+1)−bi−ci+2ci−1+ci+1)
要使得 −bi−ci+2ci−1+ci+1=0,即 bi+ci=2ci−1+ci+1。
注意这里默认 F(0)=F(n+2)=−∞,让式子在 1,n+1 处成立,令 c1=0 就可以递推了。
F(i)=max(vi,2F(i−1)+F(i+1))
考虑钦定一些点为固定点,它们都直接取 vi,观察相邻两个固定点 l,r。
对于 l<i<r,F(i)=2F(i−1)+F(i+1),设 F(l)=vi=A,F(l+1)=x,之间的序列可以表示成:
a x 2x−a 3x−2a 4x−3a⋯F(r)
这是一个等差数列,在二维平面上画出来发现 ∑l≤i<rF(i) 恰好是 (l,F(l)),(r,F(r)) 连起来和 x 轴构成的梯形的面积。
即 (F(l)+F(r))×(r−l)/2。
固定点的选择即上凸包。