![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位DP
DS-K
这个作者很懒,什么都没留下…
展开
-
CodeForces 55D Beautiful numbers
原文链接:http://www.cnblogs.com/kuangbin/archive/2013/05/01/3052670.html题目链接:http://codeforces.com/problemset/problem/55/D 一个美丽数就是可以被它的每一位的数字整除的数。给定一个区间,求美丽数的个数。这题是很好的数位DP。比较难想状态。就是被每一转载 2016-03-19 10:07:41 · 312 阅读 · 0 评论 -
HDU 4352 XHXJ's LIS
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4352题意:求[L,R]范围内有多少数满足数位中最长上升子序列长度为m。思路:dp[i][j][k]表示还有i位没确定,前面的子序列状态为j时,要求的最长上升子序列长度为k时的个数。用一个10位的二进制参考nlogn求最长上升子序列的思想更新状态。如果出现数x,如原创 2016-08-22 10:44:02 · 286 阅读 · 0 评论 -
HDU 5787 K-wolf Number
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5787题意:求区间[L,R]内,任意相邻k位(如果位数不足k,就是全部的数位)没有两两相同的数位的数的个数。思路:数位DP,因为K<=5,我们最多需要保存下来当前位的前4位就足够了。因为dp[pos][p1][p2][p3][p4]表示,现在枚举取第pos位,pos位之前的四位分原创 2016-08-03 15:08:32 · 1022 阅读 · 3 评论 -
数位DP专题
数位DP专题通过做题总结出两种方法1、根据相邻数位之间的关系递推Dp[i][j] 以j开头的i位数中所含答案的数量。可以通过递推先预处理好,然后再分情况统计。一般可以分两种情况统计:1、最高位不达到上限,每一位可以取任意值Ans+=dp[len][i] i = [ 0 , digit[len]-1 ]Tips:如果前导零会对答案造成影响,应该原创 2016-03-19 11:05:33 · 590 阅读 · 0 评论 -
LightOJ 1068 Investigation
题目链接:http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1068题意:在 [A,B]范围内找能被k整除且所有位的和也能被k整除的数的个数。思路:记录从最高位到当前位的两个余数即可,一个是经过数位之和,一个是带权值的数位之和。如果最后两个个余数都为0,说明满足条件。数位原创 2016-03-16 11:00:03 · 353 阅读 · 0 评论 -
HDU 2089 不要62
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089题意:给出一个区间,统计范围内不含有4和62的数的个数。思路:简单数位DP可以根据相邻两位的关系直接递推,也可以用数位DP常用模板。直接递推的话,dp[i][j]表示以j开头,长度为i的数中满足个数。枚举相邻两位,都不能为4,且不为62时累加统计。如果统计一原创 2016-03-15 20:05:03 · 272 阅读 · 0 评论 -
HDU 3652 B-number
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652题意:在n的范围内,求含"13"且能被13整除的数的个数。思路:数位dp。对于判断是否整除,可以利用同余来逐位计算。数位dp专题:wait....#include #include #include #include #include #inclu原创 2016-03-16 08:56:16 · 297 阅读 · 0 评论 -
HDU 3709 Balanced Number
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709题意:求区间范围内的平衡数。所谓平衡数就是找一个数位作为中心,其他位产生的值为到中心的距离*该位的数值,如果中心左边的值等于右边的值,就叫做平衡数。比如4139,3作为中心,左边 = 4 * 2 + 1 * 1 = 右边 = 9 * 1.思路: 枚举固定每一位作为中心位进行原创 2016-03-16 09:10:55 · 336 阅读 · 0 评论 -
HDU 3555 Bomb
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555题意:在n的范围内有多少含“49”的数。思路:简单数位DP,可以直接递推处理不含49的数,算出来用n减。也可以dfs含“49”的数,或dfs不含“49”的数,用n去减。数位DP专题:过几天说不定就有了...递推处理再统计#include原创 2016-03-15 20:35:06 · 318 阅读 · 0 评论 -
UESTC 250 windy数
题目链接:http://acm.uestc.edu.cn/#/problem/show/250题意:windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。给出一个区间,求区间内有多少windy数。原创 2016-03-16 09:16:25 · 337 阅读 · 0 评论 -
HDU 4734 F(x)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3709题意:一个十进制的数A,定义一个函数f(A) = An * 2^n-1 + An-1 * 2^n-2 + An-2 * 2^n-3 + .... + A1 * 2^0,给出A、B,问有多少数k在[0,B]内,且f(k)思路:记忆化搜索+数位dp。用dp[i][j]表示从最高位开原创 2016-03-16 10:36:18 · 281 阅读 · 0 评论 -
HDU 4507 吉哥系列故事——恨7不成妻
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507题意:统计在[L,R]区间内所有与7无关数字的平方和。什么样的数和7有关呢? 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关—— 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍;思路:如原创 2016-03-17 08:27:31 · 366 阅读 · 0 评论 -
POJ 3252 Round Numbers
题目链接:http://poj.org/problem?id=3252题意:求区间内round number的个数,所谓round number就是用二进制表示时,0的个数不小于1的个数。思路:记录从最高层dfs到当前层的0的个数,1的个数,以及是否用1开过头了,还是前面选的全是0。如果前面全是0,可以继续选0或者在当前层以1开头。或者就当前层选1/0。#i原创 2016-03-17 17:32:15 · 280 阅读 · 0 评论 -
SPOJ BALNUM Balanced Numbers
题目链接:http://www.spoj.com/problems/BALNUM/en/题意:在一个区间内,找出所有满足条件的数的个数(一个数的所有数位中,偶数数字出现奇数次,奇数数字出现偶数次)。思路:用三进制的10位数表示当前数位出现的状态,每一位如果是0,表示没有出现过,1表示出现奇数次,2表示出现偶数次。然后注意一下处理前导零的情况即可(如果当前位枚举的数是0,且前原创 2016-03-18 18:08:39 · 420 阅读 · 0 评论 -
LightOJ 1032 Fast Bit Calculations
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25909题意:给定范围内,所有数的二进制表示中含连续1的位的总数,比如 01110 第3,4位就是符合计数要求的位,如果一个位是1,且它的前一位也是1,那么它就算一个。思路:可以直接递推解决。dp[i][0] = dp[i-1][0原创 2016-03-18 19:00:09 · 301 阅读 · 0 评论 -
LightOJ 1205 Palindromic Numbers
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26917题意:统计范围内回文数的个数,一个数是回文数条件是正反顺序为相同的数。思路:因为判断回文数要从两边向中间每次让两个数相等。范围内有很多回文数,可以按照长度来分类,所以我们枚举长度来统计。我们从两边向中间去dfs,每次记录两边的位原创 2016-03-19 09:47:48 · 309 阅读 · 0 评论 -
LightOJ 1140 How Many Zeroes?
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25909题意:在[A,B]范围内,数出所有数中含0的个数。思路:直接递推dp[i][j] = ∑dp[i-1][k] k∈[0,9] + (j==0)?10^(i-1):0;dp[i][j]表示以j开头的i位数中一共含有多少个0。统原创 2016-03-18 18:56:12 · 299 阅读 · 0 评论