ARC114お疲れさまでした。ABC3完で温まれてうれしいです。この問題を僕と同じ解き方をした人が少なかったので、自分の解法を紹介します。
問題概要
日本語問題文があるので割愛
解法
大まかな方針は 『愚直な操作回数 から不要な操作を引いていく。』です。
初めに、愚直な操作について考えます。数列のそれぞれの要素を と同じものに書き換える 回の操作を全ての数列に対して行います。この時の操作回数は のありうる個数 と一度当たりの操作回数 の積 になります。ここから不要な操作を減らすことを考えます。
操作の条件から に対して かつ、 を満たす で が存在しない は とまとめて操作して良いとわかります。
したがって、 からそのような の個数を引くと答えが求められます。
数列が 番目まで埋まっているとき、値 が最後である数列の埋め方の数について考えます。これは 番目の値が であり、 番目以前の値は何でもよいので、 となります。
次に、 に対して 番目の値が のとき操作が不要になる条件を満たす組合せの数を求めます。これは を満たす 番目の値が で終わる数と 番目から 番目までの値が 以上になる組合せの数の積であるので、 として求められます。
を『数列の 番目まで埋まっている時、値 の操作が不要になる数』と定義して、dp 遷移について考えます。 は不要な操作の総和であるので として求められます。この式を変形するとdp遷移は となります。
dp 配列が求められているとき、 番目以降の数字は自由に選べることを考慮すると、それぞれの値 において減らすことができる操作回数は となります。
と に対してこれを行うので、このアルゴリズムは時間計算量 になります。
提出コード