如下对于满足决策单调性的 DP 进行决策点分治的代码:
#define rep(i,a,b) for(int i=a;i<=b;i++)
inline int calc(int i,int j){}
inline void solve(int l,int r,int L,int R)
{
if(l>r||L>R) return;int mid=(l+r)>>1,p=mid;
rep(i,L,min(mid-1,R)) if(calc(i,mid)<=calc(p,mid)) p=i;
f[mid]=calc(p,mid);
solve(l,mid-1,L,p);solve(mid+1,r,p,R);
}
若把枚举决策点的 <= 换成 < 就会寄,有没有大佬可以解释一下为什么。