观察到转移方程里新状态 dp[j - 1] + sqr(i - j + s[i] - s[j - 1] - l) 似乎是一个单调的东西(其实不是)(当 j 变小时 i - j 变大,s[i] - s[j - 1]也变大)于是二分找到这个东西与 l 最接近的 j 的取值,用它前后2000个j来更新状态,可以通过,在全部数据里最大点的用时约100ms。
dp[j - 1] + sqr(i - j + s[i] - s[j - 1] - l)
j
i - j
s[i] - s[j - 1]