[BZOJ1833][ZJOI2010]数字计数】的更多相关文章

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1833 分析:简单的数位DP f[i][j][k]表示在i位数.最高位j的所有数字中k的出现次数 那么f[i][j][k]=∑f[i-1][0..9][k] 对于结果就加一加减一减就OK了…
Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次. Sample Input 1 99 Sample Output 9 20 20 20 20 20 20 20 20 20 HINT 30%的数据中,a<=b<=10^6: 100%的数据中,a<=b<=10^12. S…
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式: 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次. 输入输出样例 输入样例#1: 复制 1 99 输出样例#1: 复制 9 20 20 20 20 20 20 20 20 20 说明 30%的数据中,a<=b<=10^6: 100%的数据中,…
P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的.所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数. 那么就有递推方程:\(f(i)=f(i-1)*10+10^{i-1}\). 假设现在要求的数为\(x\)位,那么我们依次从\(x\)位往下面求就行了.假设第\(x\)位的数字为\(k\),那么我们枚举第一位从\(0\)到\(k\),每一个数字的出现次数加上\(f(i-1)*k+10^{i-1}\…
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i<=9) 也就是DFS只需要记录 : 当前填到第几位 pos k一共出现多少次 sum 目标数字 k 是否顶上界 limit 是否全是前导零 qdl dp[pos][sum]: >不顶上界,没有前导零, 当前填到第pos位,目标数字一共出现sum次的时候(前pos位中一共有sum个目标数字) 对答案产…
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众. 不吉利的数字为所有含有4或62的号码.例如: 62315 73418 88914 都属于不吉利号码.但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列. 你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少…
题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 数位DP 进行求解. 定义一个结构体数组 \(f[pos][all0]\) 表示满足如下条件时 \(0 \sim 9\) 出现的次数: 当前所在数位为第 \(pos\) 位: \(all0\) 为 \(1\) 表示当前状态之前一直都是前置 \(0\) ,为 \(0\) 表示前面的数位上面出现过不为…
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统计时,把0的答案减掉对应位的即可,在第\(i\)位的前导0会产生额外的\(10^{i-1}\)个答案. #include <cstdio> #include <cstring> #include <algorithm> int Ans[10],A[10],f[10][10]…
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t=0}^{9} dp[i - 1][t][k]\),即在每个数前面放一个\(j\),但是对于放在前面的这个\(j\)我们还没有计算进去,所以有:\(dp[i][j][j] += 10^{i-1}\).注意此时计算的是有前导0的. 接下来见代码(其实是不知道怎么描述). 代码如下 #include <…
BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之和为\(sum\). #include<cstdio> #include<cstring> using namespace std; typedef long long ll; const int N = 13; ll f[N][N]; int a[N], nw; inline ll…