ICPCアジア地区横浜大会2018 D問題 : Shortest Common Non-Subsequence

問題. Shortest Common Non-Subsequence

'0' と '1' からなる2つの文字列  p, q が与えられる. p q のどちらの部分文字列でもない '0' と '1' からなる文字列で最小の長さのものを求めよ.ただし,答えが複数ある場合は辞書順で最小のものを求めよ.

制約 1 \le |p|, |q| \le 4,000

解法. 動的計画法

 p = 111, q = 000 の場合で,下のような列挙木を考える.
f:id:tatanaideyo:20181211093924p:plain:w300
f:id:tatanaideyo:20181211094002p:plain:w400
根からオレンジ色の頂点までの経路で,訪れた順番に文字を並べると, p q のどちらの部分文字列でもないものが得られる.ただし,根は空白文字で,頂点の側に書かれている数字は「 p i 文字目 /  q j 文字目」を表している.この数字の組  (i, j) を状態として,値をその頂点までの最短路長として動的計画法を行う.状態遷移として, p i 文字目と  q j 文字目にいるときに,最も近い '0' と '1' への2通りが考えられるので,全体で  O(|p| |q|) 時間で計算可能である.

計算時間 O \left(|p| |q| \right)

まとめ

状態遷移や解の構成を実装するのが難しかった.
動的計画法の説明を書くと長くなるので絵でごまかした.