AtCoder Beginner Contest 135:D - Digits Parade
問題
https://atcoder.jp/contests/abc135/tasks/abc135_d
解法
以下の DP を考える.
dp(i, j) := 0 ~ i 桁目まで見て,13 で割った余りが j のとき,i + 1 桁目以降余りが 5 になるような ? の埋め方の通り数
i 桁目が ? であるときは 0 ~ 9 を入れる方法があるので,この 10 通りを全て試す.遷移においては,各桁ごとに mod を取ったものを足していく.
dp(i, j) = dp(i + 1, (j + k * (10 ^ i)) % 13) (0 <= k <= 9)
i 桁目がすでに決まっているときは k = S_i として計算すればよい.O(|S|).
解答
https://atcoder.jp/contests/abc135/submissions/6589760
考えてしまえばとてもシンプルな DP だったので,コンテスト本番中に通しておきたかった.