[BZOJ 1833] 数字计数】的更多相关文章

Link: BZOJ 1833 传送门 Solution: 比较明显的数位DP 先预处理出1~9和包括前导0的0的个数:$pre[i]=pre[i-1]*10+10^{digit-1}$ (可以分为首位和其它位来考虑问题) 求$(L,R)$的个数,可以用$(1,R)-(1,L-1)$差分来做 在求$(1,K)$时,我们先根据预处理的值算出$[0,999....99]$的值(不受边界影响) 接下来从最高位开始尽可能增加$10^n$,直到达到边界后再开始增加$10^{n-1}$ 每次对于前面已确定的…
题目链接 做的第一道数位DP题,听说是最基础的模板题,但还是花了好长时间才写出来..... 想深入了解下数位DP的请点这里 先设dp数组dp[i][j][k]表示数位是i,以j开头的数k出现的次数 有  数位dp的题一般都会用到前缀数组,题目要求我们求b-a这个区间里各个数码出现的次数,我们可以分别求出(0,b)和(0,a-1)然后相减即可 具体分析请看代码,写的还算详细 #include <bits/stdc++.h> using namespace std; typedef long lo…
dp(i, j, k)表示共i位, 最高位是j, 数字k出现次数. 预处理出来. 差分答案, 对于0~x的答案, 从低位到高位进行讨论 ------------------------------------------------------------------------------ #include<bits/stdc++.h>   using namespace std;   typedef long long ll;   const int maxn = 16; const in…
数位DP Orz iwtwiioi 学习了一下用记忆化搜索来捉题的新姿势……但没学会TAT,再挖个坑(妈蛋难道对我来说数位DP就是个神坑吗……sigh) //BZOJ 1833 #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define rep(i,n) for(int i=0;i<n;++i) #de…
题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i 位,这一位是 t ,那么数码 t 的答案是要加一个值的(见代码). 代码 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmat…
题目链接 \(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\). 先枚举当前是算数字\(x\)出现的次数,设\(f_{i,j}\)表示从高位往低位\(dp\),\(dp\)完了前\(i\)位之后\(x\)出现了\(j\)次的方案数.然后再加一维,表示当前这一位能否自由选数(也就是说之前是否是一路选最大值过来的).转移分情况讨论一下就好了. 注意这种写法还有一点情况,就是算\(0\)出现的次数时需要减去区间内前导\(0\)的个数. 下面贴代码: #include<iostream> #include&l…
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2951  Solved: 1307[Submit][Status][Discuss] Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次.…
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2494  Solved: 1101[Submit][Status][Discuss] Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文件中包含一行10个整数,分别表示0-9在[a,b]中出现了多少次.…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1833 统计\(a~b\)中数字\(0,1,2,...,9\)分别出现了多少次. 分析 数位dp真是细节又多又容易出错,我都懒得看题解,所以也就懒得写题解了... 注意细节吧还是... #include <bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; ll A[],B[],num[]; ll f[][][]…