暴力 dp 简单。
考虑 m 很小,所以实际上有用的位置只有不到 m 个。但是贡献系数 \(10^x\bmod p\) 不一样。
贡献系数只有 p 个,每个系数有 ? 种插的数。
先预处理 \(f(i, j)\) 表示用 \(i\) 个数和为 \(j\) 的方案数。
\(dp(i,j,k)\) 表示考虑前 \(i\) 个。
我糖丸了!!!
T3 中对于那个十进制数的限制,我一直想的是 \((pre\times 10^x+y)\bmod p\) 来算(递推做法)。
结果直接表示成 \(A=a_0\times 10^0+a_1\times 10^1+...+a_n\times 10^n\),然后按照 \(10^i\bmod p\) 来分组就做完了吧???
预处理 \(ct(i)\) 表示 \(10^x\bmod p = i\) 的个数。然后我们再预处理 \(f(i,j)\) 表示用 \(i\) 个 \([1,9]\) 的数凑出和为 \(j\) 的方案数。这个是非常简单的。
然后 \(dp(i,j,k)\) 表示考虑前 \(i\) 个同余类,即前面的 \(10^x\bmod p\le i\),数位和为 \(j\),\(A\bmod p\) 的结果是 \(k\) 的方案数。
转移考虑当前这个同余类选择的数字和是多少 (m),转移总体复杂度是 \(O(m^2p^2)\)。考虑怎么算转移系数。
对于每个同余类,有 \(ct(i)\) 个位置,要求选出一些 \([1,9]\) 的数使得数位和等于 \(j\)。考虑枚举选了几个数 \(k\),我们就用 \(f(k,j)\)。然后其他位置选 0,再乘上一个组合系数即可。
标签:,10,系数,bmod,同余类,times,dp From: https://www.cnblogs.com/LCat90/p/18535721