题解 LuoguP2602 [ZJOI2010]数字计数
题意:给定两个正整数 和 ,求在 中的所有整数中,每个数码各出现了多少次。
数据范围:
首先,这道题显然是数位 DP 的套路题(统计某个区间内满足某个性质的数有多少之类的题基本都是数位DP)。
设状态 表示已经考虑到了前 位,目前的某个数码 的个数为 。
我们可以转移: ,其中 表示考虑的第 位上的数码。
采用记忆化搜索进行转移处理数位 DP 是很方便的,具体实现见代码(有注释):
1 |
|
题意:给定两个正整数 a 和 b ,求在 [a,b] 中的所有整数中,每个数码各出现了多少次。
数据范围:a≤b≤1012
首先,这道题显然是数位 DP 的套路题(统计某个区间内满足某个性质的数有多少之类的题基本都是数位DP)。
设状态 f[i][sum] 表示已经考虑到了前 i 位,目前的某个数码 d 的个数为 sum 。
我们可以转移:f[i][sum]=∑f[i−1][sum−(now==d)] ,其中 now 表示考虑的第 i 位上的数码。
采用记忆化搜索进行转移处理数位 DP 是很方便的,具体实现见代码(有注释):
1 | #include <bits/stdc++.h> |