一般用于处理形如区间 $[l,r]$ 中满足条件的数有几个之类问题。
首先考虑将区间 $[l,r]$ 拆分成 $[0,r]-[0,l]$。
考虑记忆化搜索,一般搜索函数为 $f(pos,s,eq,zero)$。
其中 $pos$ 表示当前搜索位置,$s$ 表示前缀状态,$eq$ 表示前缀是否与查询上界相等,$zero$ 表示是否有前导零。
询问区间 $[l,r]$ 中满足相邻数位之差至少为 $2$ 的数的个数。
询问区间 $[l,r]$ 所有整数中 $0\sim 9$ 分别出现的次数。
依次计算 $0\sim 9$ 出现次数。每次把搜索函数中的 $s$ 当成当前前缀的贡献即可。
给出两个数 $a,b$,求出 $[a,b]$ 中各位数字之和能整除原数的数的个数。
发现在各位数字之和不确定情况下难以判定最后结果是否被各位数字之和相当困难。
于是考虑枚举所有可能的各位数字之和 $\text{Mod}$。于是 $\text{dp}$ 过程中维护一下前面数位之和以及前缀模 $\text{Mod}$ 的结果。
于是每次可能状态共有 $18\ast(18\ast 9)^2$ 个,最坏计算次数 $18\ast(18\ast 9)^3\approx 8\times 10^7$。
当然每次合法状态数不可能达到上界。另外可以考虑在 $\text{dp}$ 过程中适当剪枝。
如果某个数字按 $10$ 进位制表示的字串中含有长度至少为 $2$ 的连续回文子串,则称该数为萌数。询问区间 $[l,r]$ 中萌数的个数。
数据范围 $1\le l\le r\lt 10^{1000}$,输出结果对 $10^9+7$ 取模。
回文串信息难以维护,考虑计算不含回文字串的数字个数。
发现长度不小于 $2$ 的回文串一定含长度为 $2$ 或 $3$ 的回文串。
于是一个数不含长度至少为 $2$ 的回文串等价于一个数不含长度为 $2$ 或 $3$ 的回文串。
于是只需要维护一个数的前面两位,保证当前位不与前两位相同即可。