
数位 dp
111
stduy_ing
这个作者很懒,什么都没留下…
展开
-
Codeforces 259 D. Little Elephant and Elections (数位dp +dfs 暴力)
链接: D. Little Elephant and Elections 题意: 从 1 到 m 选 7 个数,使得其中一个数中 数位4 7 的个数大于其他 6 个数中 数位4 7 的个数的和。 思路: 先用数位 dp 求出分别含 0 - 9 个 4 ,7 的数的个数。 然后枚举第一个人选的 数中 4 7 的个数,再 dfs 枚举其他 6 个人选的数( 6 个人的和小于第一个人)。 #include<iostream> #include<cstdio> #include<s原创 2020-08-08 19:07:04 · 234 阅读 · 0 评论 -
Codeforces 205 C. Little Elephant and Interval (数位 dp)
链接 :C. Little Elephant and Interval 题意: 求 l 到 r 区间内首尾和末位相同的数的个数。 思路: 写了个很莽的数位 dp ,貌似有其他更巧妙的方法,这里就是找到第一个不为 0 的数作为首位,最后判断最后一位和第一位是否相等并且这个数不能为 0 . 代码: #include<iostream> #include<cstdio> #include<stack> #include<math.h> #include<que原创 2020-08-06 19:49:56 · 247 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)H-Pair (数位 dp)
链接:H-Pair 题意: 求 A & B < C 或者 A ^ B > C 的 (A, B)的对数。 思路: 还是数位 dp ,把数拆成二进制一位一位考虑, 先那 & 来考虑 还是记录 当前的值是不是和 C 完全相同,如果相同就是 1 ,如果前面位已经出现过小于 C的了 就是 0,如果前面出现过 大于 C 的 了 就是 2 代表不合法。如果当前两个状态都不合法,则无法进入下一个 dfs。最后判断一下 两个状态是不是有一个是 0 就好了 是就返回 1 ,还有 A,B 都大于原创 2020-07-29 00:13:32 · 176 阅读 · 0 评论 -
2020牛客暑期多校训练营(第六场)H-Harmony Pairs (数位 dp)
链接: H-Harmony Pairs 题意: 求 0 <= A <= B 中 S(A) > S(B)的 A,B 的对数,S(A)是 A的各位之和。 思路: 首先 S(A)> S(B),很好解决,dfs维护一个 A B 的当前数位差就好了,还有就是 A <= B,再来一个状态表示 当前所有位 A和B的每一位是不是都相同就好了,若都相同 B的当前位必须大于等于 A的当前位,否则就随便取。所以 dp记录当前位置,数位差,A是否等于 B, 再记录一下两个 limit (一开始没记原创 2020-07-28 23:36:42 · 396 阅读 · 1 评论 -
HDU 4507 吉哥系列故事——恨7不成妻(数位dp)
链接: 吉哥系列故事——恨7不成妻 题意: 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 求给定区间与7无关的数的平方和。 思路: 三个条件都是数位 dp中很好求的条件,但这个题不是求与7无关的数的个数,而是求平方和。 dp 记忆化的状态还是和普通的一样,维护一个 pos ,数位和对7的余数,以及这个数对7的余数。 关键是怎么求平方和,感觉对递归的理解要求挺高的,假设当前选的是第原创 2020-07-07 19:52:17 · 198 阅读 · 0 评论 -
Codeforces - 55 D Beautiful numbers (数位 dp +状态压缩)
链接 :Beautiful numbers 题意: 求 a到 b 中有多少个数满足 - 这个数能被它除0以外的每一个数位整除。 思路: 感觉这题挺不错的,状态有点难搞,首先 9 个数 的 lcm 为 2520,一开始想的状态是到第 i 位 该数对 2520 的余数mod和当前所选数的 lcm 。如果最后 mod%lcm=0,就说明这个数是满足的。但这样要开的空间是 20 * 2520 * 2520.然后就 。。。。。 然后右想到可以用 二进制位 表示选了哪些数,把每种状态的 lcm 预处理出来就好了。原创 2020-07-06 16:36:57 · 132 阅读 · 0 评论 -
HDU 4374 F(x) ( 数位dp )
链接 :F(x) 题意: F(x) 为 x 的个每一位对应的 2 的次数之和,求 0 —b 中 f(b) >f(a)的 数的数量。 思路: 数位 dp 记录每一位的和,一开始用的 + 记录最后的结果会不会 大于 f(a),但这样因为每组数据的 f(a)都不一样,dp要么得加一维记录 f(a)要么每次算完一组把 dp值初始化。但这样就和暴力没什么区别了,因为很难找到共有的状态,每次都必须重新找,然后就 t了。 然后用减法可以很好的解决这个问题,从 f(a)的值开始,一位一位减,看到最后这个值是否大于原创 2020-07-06 14:30:02 · 141 阅读 · 0 评论 -
洛谷 2657 windy 数 (数位dp)
链接 windy 数 题意: 不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。在 a和 b 之间,包括 a 和 b ,总共有多少个 windy 数? 思路: 数位 dp ,数位 dp 其实就是一种 记忆化搜索,把搜过的状态记录下来,下次再搜索到这个状态可以直接返回值,不需要重复搜索。 dfs 主要记录 了 pos(当前位置) ,pre(前一位),status(是不是有前导0),limit (是否都为最高位)。 这里不含前导0 的主要意思是 ,如果前面都是 0 那这一位可以从 0原创 2020-06-19 16:09:57 · 394 阅读 · 0 评论