首先列出朴素的转移方程 fi=max0≤j<i(fj+a(sumi−sumj)2+b(sumi−sumj)+c)。
其中 sumi=i∑j=1xj。
对于 0≤k<j<i,假设决策 j 优于决策 k,有 fj+a(sumi−sumj)2+b(sumi−sumj)+c≥fk+a(sumi−sumk)2+b(sumi−sumk)+cfj−2a⋅sumisumj+a⋅sum2j−b⋅sumj≥fk−2a⋅sumisumk+a⋅sum2k−b⋅sumk(fj+a⋅sum2j−b⋅sumj)−(fk+a⋅sum2k−b⋅sumk)≥2a⋅sumi(sumj−sumk)(fj+a⋅sum2j−b⋅sumj)−(fk+a⋅sum2k−b⋅sumk)sumj−sumk≥2a⋅sumi
维护一只上凸包即可~
代码:
1 |
|