数位dp进阶(hdu2089,3652)】的更多相关文章

数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是直接TLE了2333).其实是数位DP的入门题: 初探数位DP:写的很详细(看完就不必看我的代码了..) f[i,j]:位置长度为i以j开头的符合条件的数的个数:(一般的dp式子中,第二个参数依题意):这就直接可以推出f[i,j] = f[i,j] + f[i-1,k] ( j != 6 || k != 2)…
Problem Description 题库链接 666是一个网络用语,用来形容某人或某物很厉害很牛.而在西方,666指魔鬼,撒旦和灵魂,是不吉利的象征.所以邓志聪并不喜欢任何与6有关的数字.什么数字与6有关呢: 满足以下3个条件中的一个,我们就认为这个整数与6有关. 1.这个整数在10进制下某一位是6. 2.这个整数在10进制下的数位和是6的倍数. 3.这个数是6的整数倍. 那么问题来了:邓志聪想知道在一定区间内与6无关的数的和. Input 本题为多组输入,请处理到文件结尾,每行包含两个正整…
之前的文章已经讲过如何求1—r中的特殊数,这篇博客就来讲些进阶操作: 直接看例题(hdu2089): (题目是中文的我就不写大意了) 这题与hdu3555最大的区别就是规定了l,不再以1开始: 解决这个问题也很简单,利用前缀和的思想,先计算1—l-1特殊数的数量,在计算l—r的数量,相减就是答案了: 附上丑陋的代码: #include<cstdio> #include<iostream> using namespace std; #define int long long ; in…
B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3434    Accepted Submission(s): 1921 Problem Description A wqb-number, or B-number for short, is a non-negative integer whose decimal for…
http://www.cnblogs.com/xiaohongmao/p/3473599.html #include<cstdio> using namespace std; int n,m,f[8][3]; void init() { f[0][0]=1; for(int i=1;i<=7;++i) { f[i][0]=f[i-1][0]*9-f[i-1][1]; f[i][1]=f[i-1][0]; f[i][2]=f[i-1][2]*10+f[i-1][0]+f[i-1][1];…
数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_i;i<=r_i;i++) if(check(i)) ans++; return ans; 所有的算法都是为了减少运算步骤这一个基本原理来优化的,我们考虑这样暴力的优化,显然数的位数上面满足X性质,有些时候X性质并不是单单对于一个数的个体进行限制的 而是在某个限定区域里面的所有数字有一个X的限制,这…
不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 36862    Accepted Submission(s): 13418 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可…
B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string "13" and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task…
数位dp主要用来处理一系列需要数数的问题,一般套路为“求[l,r]区间内满足要求的数/数位的个数” 要求五花八门……比如“不出现某个数字序列”,“某种数的出现次数”等等…… 面对这种数数题,暴力的想法是枚举每个数,判断是否满足条件 比如这样: #include<cstdio> using namespace std; typedef long long LL; LL l,r,cnt; int main() { scanf("%lld%lld",&l,&r);…
题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.dp[x][mod][y][z] 表示 x位的整数,mod 13 等于几, y表示是否出现过13, 最后一位是z. 还有就是发现记忆化搜索 + 数位dp写出来真的很美讷.不说了,直接上代码,干净粗暴. #include <vector> #include <cstdio> #includ…