CODE FESTIVAL 2018 qual A C - 半分
解法
になったら、それ以降はで割らないものとします。そうすると、求める答えは本来の「回の操作後の数列としてありうるものの個数」に「回未満の操作後のをつ以上含む数列としてありうるものの個数」を加えたものになります。
からまで考えたときの、回操作してできる数列の個数(はそれまでの要素にがあったかどうかのフラグ)
というDPを考えれば、をで回割るとになるとして、
と遷移が定義できます。あとはここから適切に値をとってきて足し合わせればよいです。
計算量はになります。
反省
DPをDPだと気づくのはけっこう速くなったような気がしますが、詳細を詰めるのが苦手です。