解法
まず、三角形の成立条件を思い出すと、長さの三角形が存在するには、
が全て成立している必要があります。
逆に、が最長の辺かつ
を満たしているとき、三角形を作成することはできません。両辺に
を追加した後に2で割ると、
という条件がでてきます。
仮にこの状況になった場合、は
の中で最も大きい値になっているはずです。
は
で求めることができるので、
となるような塗り分け方は、どうにかして求めることができそうな気がします。ということで包除原理を利用して、全ての塗り分け方から、三角形を作成できないようなパターンを引くことで答えを求めることにします。
が最大であると仮定して、そのときに
となる場合の数を求めることにします。すると、これは
が最大の場合も全く同じ状況になるので、3倍すればよいはずです。
場合の数を、動的計画法で求めていきます。
番目までの数を割り振って、
の値が
になるようなものの場合の数
とします。これは、
という遷移で数え上げることができます。
右辺の1つ目の項は、を
に割り振らない場合で、残った
のどちらかに割り振ることになるので、2倍します。 2つ目の項は
を
に割り振る場合です。
この遷移を利用して数え上げを行い、あとはとして、
を求めれば、三角形にならないパターンを数え上げることができる…
はずですが、コーナーケースが存在します。
が偶数の場合、
となるケースが存在するかもしれません。このパターンは、上のDPをそのまま用いると重複して数えてしまいます。2つの
を区別して
とすると、
には、
の4つのパターンが含まれているはずですが、最後に全体から引く際に、が最大という条件を外してこれを3倍するため、合計12パターンが引かれることになります。が、
というパターンは、
通りの並べ方しかないため、2回分引いてしまっていることになります。
これを解消するために、これらのパターンも数え上げてしまいます。これまた動的計画法を利用します。
このパターンは、種類のみに
を割り振ると出来上がるので、
番目までの数字を
と
のみに割り振って、
となるようなものの場合の数
とすると、遷移は先ほどとほぼ同じで、
という遷移で数え上げることができます。
先ほどの2倍をする部分だけが消えた形になります。
ということで、この遷移を行うとは、
の2パターン分だけ綺麗に数え上げられているはずです。
あとは、この部分の調整も行いつつ、
が奇数の場合
が偶数の場合
を求めると、答えになります。
感想
解けるべき問題だった…?気がします。コンテスト中、似たようなDPをすることまでは思いついていたのですが、細かいところを詰められなかったのと、そもそもコーナーケースに気づいていませんでした。
雰囲気でDPを解いているのがバレる回でしたね。