解决问题:询问区间 $[l, r]$ 内数位间满足某种关系的数的个数。
模板:
1 |
|
例题
不要62
题意
询问区间内不含数字4且没有连续的62的数字个数。
题解
首先分析要用到的状态(dfs传的参数)。
前导零不需要,只用当前位和上一位即可判断数字是否满足条件,所以只用pos,pre,limit三个参数即可。
1 |
|
windy数
题意
询问区间内满足任意两个相邻数字之差都不小于2且不含前导零的数的个数。
题解
题目要求不要前导零,所以必须要有lead参数。
要想判断数字是否满足条件,只需要当前数和上一个判断差是否大于等于2即可。
1 |
|
数字计数
题意
给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。
题解
解法一
转化成求 1 到 n 之间 x 出现的次数。
因为题目没有要求数位之间的联系,pre可以不用要。lead 和 limit 肯定是需要的。
对数字间没有要求,所以不用考虑数位间的关系,要考虑的是 x 出现的次数。
因为要记忆化,所以考虑加上一个状态量,
解法二
其实这道题不用数位dp也能做,题目让求[1, n]范围内数字x出现的次数,直接观察规律统计答案即可。
1 |
|