を長さ
の文字列とする。
の部分列が何種類あるか数え上げる。
DP 定義
の部分列であって
で終わるものの種類数
の部分列の種類数 (空列含む)
DP 遷移
\begin{align} \text{dp} \lbrack i + 1 \rbrack \lbrack c \rbrack &= \begin{cases} \text{sum} \lbrack i \rbrack & \quad ( S _ i = c ) \cr \text{dp} \lbrack i \rbrack \lbrack c \rbrack & \quad ( S _ i \neq c ) \end{cases} \cr \text{sum} \lbrack i + 1 \rbrack &= 1 + \sum _ {c} \text{dp} \lbrack i + 1 \rbrack \lbrack c \rbrack = 2 ~ \text{sum} \lbrack i \rbrack - \text{dp} \lbrack i \rbrack \lbrack S _ i \rbrack \end{align}
のケースは自明。
の場合、
で終わる部分列は
文字目を使用するものだけを数えても問題ない。
文字目を使用する部分列の種類数は、
の部分列の種類数である。
は式変形で導いても良いし、
文字目を使うものと使わないもので
個の部分列が考えられ、
で終わる部分列のうち
文字目まででも作れるもの
個が重複していると考えても良い。