解法
制約をみてもわかるように桁DPです。
とします。
は、上から
桁目を決める段階、という意味です。
は、今作成している数字の桁和を
で割った余りが
であるという意味です。
は、今作成している数字が
未満であることが確定しているかどうか、を表します(している場合は1、なければ0です)。初期状態は、
です。
の桁数を
、
の上から
桁目を
と表記することにします。
最終的な答えは、です。-1は、0を表しています。今回は正整数が条件なので、0を省かなければなりません。
桁目まで決めた段階での桁和を
で割った余りが
のとき、
桁目を
にすることを考えます(
はもちろん0以上9以下です)。
これは、と
についてを考えることになります。
ここから先は、と
の関係によって3つに場合分けされます。順番に見ていきます。
のとき
桁目を決める時点で
未満であることが確定しているかどうかにかかわらず、
桁目以降でどんな数字を当てはめても
未満になります。ので、
になります。
ということで、遷移は
となります。のとき
未満が確定しているかどうかは、
桁目の時点で
未満であることが確定しているかどうかに依存します。
桁目の状態をそのまま受け継ぎます。
ということで、遷移は
となります。のとき
未満であることが
桁目の時点で決まっていればいいですが、そうでない場合は、
桁目で
を選ぶと
を超えてしまうので、問題の条件を満たさなくなります。ということで、
についてのみ考えればよく、遷移は
のみとなります。
あとは、これを繰り返してDPを行っていけばよいです。で割った余りを求めることに注意しましょう。