この問題好き。面白かった。
問題概要
文字列 と整数
がある。
の好きな位置に好きな英小文字を
回挿入してできる文字列の通り数を
で求めよ。
解説
とおく。
結果の文字列を前から決めていくことを考えると、
を、「
文字目までで、
回小文字の挿入以外で文字列を構成した(つまり、
の文字を使った)」とするDPが組める。
この遷移を考えて、途中で文字列の通り数が何倍されるかに注目し、26倍になる部分だけ分けて経路を選び取って、答えは
となる。
別解もある。
少し天下り的な考え方になるが、 が等しいDP配列どうしで階差をとってやると、26倍の遷移がなくなる代わりに、答えが累積和で求められるようになる。こちらのほうが定数倍は軽いはずだ。この時の答えの式は、
となる。
感想
割とすぐ解けたのでよかった。 あと、この二式なんで等しいんだろう…(コンテスト中に証明した人間いるんか?)