数位DP-数字游戏
数字游戏 科协里最近很流行数字游戏。 某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如 123,446。 现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。 输入格式 输入包含多组测试数据。 每组数据占一行,包含两个整数 a 和 b。 输出格式 每行给出一组测试数据的答案,即 [a,b] 之间有多少不降数。 数据范围 1≤a≤b≤231−1 输入样例: 1 9 1 19 输出样例: 9 18 题解: 利用类似前缀和的思想 [a, b]范围满足要求的数=[0,b]范围满足要求的数 - [0,a-1]范围满足要求的数 所以我们可以封装求[0, x]满足要求的数字为一个函数即可 一个数字x, 最右边当成第一位,数字长度为len的话,最左侧就为第len位,把他们存储到a数组中。 从最左侧开始搜索, pos记录枚举哪一位了, 需要记录前一位数字pre,pre如果比当前枚举的数字i大的话,就continue不予统计。 需要用一个limit记录当前位能枚举的上界,比如19 这个2位数,最左侧一位能枚举的范围是0-1, 不能超过1, 如果limit为false当前位能枚举到9,否则只能到最大a[pos] dfs的含义就是从左往右枚举每一位,看是否符合要求。 为了优化,记忆化即可,需要注意有limit的情形不能用记忆化,比如求