
数位DP
数位DP
_7许
%
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数位DP】BZOJ 3679: 数字之积
BZOJ 3679: 数字之积题意:求[L, R)区间内,各个数位之积在(0, n]的数的个数。思路:因为L,R的范围有1e18,如果每个数位都是9,9^18是最大的乘积了吧www……是不可能开的下数组的。那怎么办,我们怎么处理乘积呢?首先说,n的范围是<=1e9,所以一旦大于1e9我们可以直接return 0. 那么问题就变成了怎么处理1e9之内的乘积。(还是很大啊qaq)。...原创 2020-01-08 20:16:37 · 453 阅读 · 0 评论 -
【数位DP-三维dp数组】HDU 3652 B-number
HDU 3652 B-number题意:给一个数n,求区间[1, n]中具有连续13,并且可以可以被13整除的数的个数。思路:对于一个数来说,它有两个固有性质。1:是不是13的倍数. 2:有没有连续数位为13. 我们的dp数组如何来表示出所谓无后效性就很重要。我们可以用一维来表示是不是满足性质2,再用一维表示它mod13的余数。那么dp也就是一个三维数组。实践证明两维真的不可。第一道...原创 2020-01-08 10:44:50 · 332 阅读 · 0 评论 -
【数位DP(前导零的处理)】POJ 3252 Round Numbers
POJ 3252 Round Numbers题意:求区间中二进制表示0的个数不小于1的个数的数的个数思路:这个必须要考虑前导零的影响,所以设置一个布尔变量,用来记录当前位的高位是不是都是0。然后的话cnt初始值设为32(int最大数位为32位),如果高位有1,且当前位为0,那么cnt + 1;当前位为1,那么cnt - 1。跑完所有的数位之后,如果cnt >= 32就说明0的...原创 2020-01-05 20:44:24 · 372 阅读 · 0 评论 -
【数位DP(Sub)】HDU 4734 F(x)
HDU 4734 F(x)思路:dfs里的cnt指的是当前pos位,高位还需要凑cnt的价值和。例如211。第2位2,对应的cnt = 0第1位1,对应的cnt = 0 + 2*(1 << 2) = 8第0位1,对应的cnt = 8 + 1*(1 << 1) = 10第-1位,对应的cnt = 10 + 1*(1 << 0) = 11拿第-1位来...原创 2020-01-05 19:13:34 · 208 阅读 · 0 评论 -
【数位DP】HDU 2089 不要62
HDU 2089 不要62题意:求[n, m]中没有连续62并且没有4的数的个数。其中n和m的范围是1e6解:其实最关键的部分就是dfs的部分。首先我们将每个数位的值保存在一个数组里。解释一下dfs参数的意义:pos:第几个数位。例如100,pos分别为2,1,0pre:高一位数位的值。例如67,数位0的高一位数位是1,值为6。(它存在的意义是因为62连续是不合法的)st...原创 2020-01-05 11:16:16 · 200 阅读 · 0 评论