概念
数位DP 是与数位相关的一类技术类DP,一般用于统计[l,r]区间满足特定条件的元素逇个数;
数位指的是个位、十位、百位、千位等;
数位DP就是在数位上进行动态规划
数位DP实质上是一种有策略的穷举方式,在子问题求解完毕后将其结果记忆化就可以了
如何枚举
枚举[0,386]区间所有数的时候,首先从百位开始枚举,百位可能是 0,1,2,3 枚举的时候不超过386 即可
1、百位0:十位 可以是 0 ~ 9,个位也可以是0 ~ 9,枚举没有限制,
因为百位是0之后,后面的位数无论是多少都不可能超过386,相当于枚举 000 ~ 099
2、百位1:十位可以枚举 0~9 个位也可以是0~9 枚举
没有限制 枚举 100~199
3、百位2:同百位 1
没有限制,枚举200 ~ 2999
- 百位3 :
1、十位只可以是 0 ~ 8,否则的话超过了 386--此时是有上边界 限制的
2、当十位是0~7的时候,个位可以是0~9,因为379 < 386 ;
3、当十位是8的时候,个位只能是 0~6 此时是有上边界限制的
数位DP需要注意的问题
- 记忆化:
无限制的时候,可以记忆化
有限制的时候,不可以记忆化 - 上限限制
当高位枚举刚好达到上边界的时候,紧邻着的下一位枚举就有上界限制了,可以设置一个limit标记是否有上界限制 - 高位枚举
高位枚举0, - 前导0