决策单调性优化 DP
决策单调性优化 DP
il void solve(int l, int r) {
if (l > r) return;
if (l == r) {
f[l] = f[p[l]] + W(p[l], l);
return;
}
int mid = (l + r) >> 1;
for (int i = p[l - 1]; i <= p[r]; i++) {
int c = f[i] + W(i, mid);
if (c < f[mid]) f[mid] = c, p[mid] = i;
}
solve(l, mid);
for (int i = l; i <= mid; i++) {
int c = f[i] + W(i, r);
if (c < f[r]) f[r] = c, p[r] = i;
}
solve(mid + 1, r);
}

浙公网安备 33010602011771号