一般用于处理形如区间 $[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}$ 过程中适当剪枝。