先考虑从左往右跳
dpi,j 表示由 xj 位置到达 xi 位
dpi,j=maxxi−xj≥xj−xk,k<j,j<i{dpj,k}+pi
dpi,j=maxxi≥2×xj−xk,k<j<i{dpj,k}+pi
由此固定 i ,每次 j 增大都影响 k 的范围,进行单调队列优化维护 dpj,k 最大值,最后答案
maxi=1nmaxj=1idpi,j
正确吗?
不知道是正确性有问题还是我写挂了
for(int i=1;i<=n;i++){
int k=1;
for(int j=1;j<i;j++){
for( ;k<j;k++){
while(q.size() && dp[j][q.back()]<=dp[j][k])
q.pop_back();
q.push_back(k);
}
while(q.size() && x[i]<2*x[j]-x[q.front()]) q.pop_front();
if(q.size()) dp[i][j]=dp[j][q.front()]+a[i];
}
}