P12087 [RMI 2019] 好数 / Lucky Numbers

· · 题解

线段树矩乘维护数位 DP。

dp_{i,0/1,0/1} 表示当前第 i 位,是否顶到上界,第 i 位是否为 1 的方案数量,x_ix 从高到低第 i 位。

则有:

这个显然可以矩阵乘法维护。

f=\begin{pmatrix}dp_{i-1,0,0}&dp_{i-1,0,1}&dp_{i-1,1,0}&dp_{i-1,1,1}\end{pmatrix},对于 x_i>3,可以得出转移矩阵为:

\begin{pmatrix}9&1&0&0\\8&1&0&0\\x_i-1&1&1&0\\x_i-2&1&1&0\end{pmatrix} 直接线段树维护即可。 [submission](https://loj.ac/s/2464531)