决策单调性优化

有两种优化方式:

  1. 单调栈+二分
    明天去问wzj
  2. 分治
void DP(int l, int r, int k_l, int k_r)
{
  int mid = (l + r) / 2, k = k_l;
  // 求状态f[mid]的最优决策点
  for (int i = k_l; i <= min(k_r, mid - 1); ++i)
    if (w(i, mid) < w(k, mid)) k = i;
  f[mid] = w(k, mid);
  // 根据决策单调性得出左右两部分的决策区间,递归处理
  if (l < mid) DP(l, mid - 1, k_l, k);
  if (r > mid) DP(mid + 1, r, k, k_r);
}

明天去问gigo,貌似很多的都可以转换成单调队列和斜率优化。

你可能感兴趣的:(决策单调性优化)