数位DP基本都是这个套路吧
dfs(数的最后若干位,各种限制条件,当前第几位)
if 最后一位
return 各种限制条件下的返回值
局部变量 ct=当前位的数字
局部变量 sum=0;
for i=0 to ct-1
sum+=当前位取i时一定无限制的合法状态数
sum+=当前位取i时满足当前限制的合法状态数
根据ct更新限制条件 不再满足则return sum
return sum+dfs(当前位后的若干位,更新后的限制条件,下一位)
slv(当前数)
if(只有一位) return 对应的贡献
局部变量 ct;
for ct=可能最高位 to 1
if 当前位有数字 break
局部变量 nw=当前位数字
局部变量 sum=0
for i=1 to nw-1
sum+=当前位取i后合法情况任意取的贡献
for i=1 to ct-1
for j=1 to 9
sum+=第i位取j后合法情况任意取的贡献
sum+=dfs(去掉第一位后的若干位,限制条件,第二位)
return sum
main
预处理当前位取i的各种条件各种限制的贡献
读入 L R
--L
输出 slv(R)-slv(L)
return 0