数位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 · 398 阅读 · 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 · 296 阅读 · 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 · 331 阅读 · 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 · 181 阅读 · 0 评论 -
【数位DP】HDU 2089 不要62
HDU 2089 不要62 题意: 求[n, m]中没有连续62并且没有4的数的个数。 其中n和m的范围是1e6 解: 其实最关键的部分就是dfs的部分。 首先我们将每个数位的值保存在一个数组里。 解释一下dfs参数的意义: pos:第几个数位。例如100,pos分别为2,1,0 pre:高一位数位的值。例如67,数位0的高一位数位是1,值为6。(它存在的意义是因为62连续是不合法的) st...原创 2020-01-05 11:16:16 · 173 阅读 · 0 评论