H - Most Valuable Parentheses 解説 by maspy


参考:https://info.atcoder.jp/entry/algorithm_lectures/min_plus_convolution

dp による解法を考え,それを凸数列に対する操作に言い換えることで,公式解説の貪欲法と同じ解法を導出することができます.

ある時点までで選ぶ必要がある開きカッコの個数の最小個数が \(k\) であるとき,\(k+i\) 個の開きカッコを選んだ場合の最適解での利得を \(\mathrm{dp}[i]\) とします.

次の操作ができればよいことになります.

  • \(\mathrm{newdp}[i] = \max(\mathrm{dp}[i], \mathrm{dp}[i-1]+a)\) として dp テーブル全体を更新
  • dp テーブルから先頭の要素を削除する.

ひとつめの操作は次の \(2\) つの列の max-plus convolution です.

  • \(\mathrm{dp}\)
  • \([0,a]\)

このことから,常に dp テーブルは上凸であることが分かります.また折れ線グラフを考えれば,操作は

  • 傾き \(a\)\(x\) 座標幅が \(1\) であるような線分の挿入
  • 左端にある最も大きな傾きの線分を削除

というようになります.折れ線グラフの線分の多重集合を priority queue で保持しながらこれを行うことを考えると,公式解説と同じアルゴリズムが得られます.

投稿日時:
最終更新: