ARC077 D - 11
解法
ダブっている数字は数列に1つ必ず存在します。
ダブってる数字のうち左側にあるものを,右側にあるものをとしたとき、数列は次のようになっています。
ここで、はそれぞれ0個以上の要素を持っている数列です。
長さの部分列を数え上げる方針としては、まず
というを除いたパターンを数え、その後が存在した場合に新しく作成できるパターンを計算して合算します。
を無視した場合
という数列には、~の数字がすべて1つずつ含まれています。ので、全ての数字について、使うか使わないかの2通りを考えればよく、これは
となります。を考慮した場合
新しく増えるパターンは、必ずを使用します。なぜなら、使用しないパターンはすでに前の段階で数えているからです。
ここは、さらに2つに場合分けします。を部分列に含むか含まないか、です。
を含む場合
を使用することが確定しているので、残ったの部分から個を選びます。ということで
となります。を含まない場合
とが同じ数字であるので、被りがないように数え上げなければなりません。
ここで、どのように部分列を選んだらまだ数えられてない部分列(ここで数えるべき部分列)になるかというと、
の中から少なくとも1つの要素を選んだ場合
です。
の要素は、を使用した場合でもを使用した場合でも、その数字より左側に、はどちらの場合でも右側に存在します。
ですが、にある要素は、を使用した場合はの右側に、を使用した場合ではの左側に並ぶことになりますので、かならずまだ数えられてない、新しい部分列を作成できます。
の中から少なくとも1つの要素を選ぶことについて考えると、
全て使うパターン、を使うパターン、を使うパターン、のみ使うパターンの4通りです。
これをそれぞれ求めるのは難しいので、の中から自由に選ぶパターンから、余分なパターンを引く、包除原理の考え方を使うことにします。
の中から自由に選ぶパターンの計算式をたてます。すでに決まっているのはのみなので、から残りの個を選択します。の個数をその文字で表現したとき、
となります。
そして、余分なパターンは、を使用しないパターンです。これは言い換えると、のみから選んだパターン、となります。
から自由に選ぶパターンは、簡単に計算することができ、
です。あとは、上の式から下の式を引くだけでよく、
となります。
ということで、最終的な式は次のようになります。
あとは、それぞれのについてこれを求めれば、答えとなります。