mini notes

競技プログラミングの解法メモを残していきます。

ABC130 E - Common Subsequence

問題:E - Common Subsequence

解答:Submission #15893522 - AtCoder Beginner Contest 130

解法:dp[i][j] : sのi番目、tのj番目を最後に使うときの共通部分列の個数(空集合は除く)、
sm[i][j]:dpの二次元累積和 とすると、s[i] == t[j]の場合にdp[i+1][j+1] = sm[i][j] + 1と遷移させるとうまくいく。
(これまで作られていた部分列(個数sm[i][j])の後ろにs[i]を追加する + s[i]自身)

smは、sm[i+1][j+1] = sm[i][j+1] + sm[i+1][j] - sm[i][j] + dp[i+1][j+1] と遷移させる。