解题报告 (十四) 数位DP

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告 (十四) 数位DP相关的知识,希望对你有一定的参考价值。



数位DP 解题报告

HDU 4722 Good Numbers

链接:HDU 4722 Good Numbers
题意:如果一个数的所有位数加起来是 10 10 10 的倍数, 则称之为 g o o d   n u m b e r good \\ number good number,求区间 [ l , r ] ( 0 ≤ l ≤ r ≤ 1 0 18 ) [l, r](0 \\le l \\le r \\le 10^{18}) [l,r](0lr1018) g o o d   n u m b e r good \\ number good number 的个数;

HDU 2089 不要62

链接:HDU 2089 不要62
题意:对于一个数字,如果出现 4 或者 62 ,则属于不吉利数字,给定 n , m ( 0 < n < m < 1 0 6 ) n, m(0 \\lt n \\lt m < 10^6) n,m(0<n<m<106),求 [ n , m ] [n, m] [n,m] 中非不吉利数字的个数。

HDU 3555 Bomb

链接:HDU 3555 Bomb
题意:给定一个 n ( 1 ≤ n ≤ 2 63 − 1 ) n(1 \\le n \\le 2^{63}-1) n(1n2631),求小于等于 n n n 的数字中包含 49 的数的个数。

HDU 3652 B-number

链接:HDU 3652 B-number
题意:一个数的十进制包含子串 “13” 并且能被 13 整除,则被称为 B数,求小于等于 n ( n ≤ 1 0 9 ) n(n \\le 10^9) n(n109) 的 B数。

PKU 3252 Round Numbers

链接:PKU 3252 Round Numbers
题意:如果一个数的二进制表示中 0 的个数大于等于 1,则称它为 r o u n d   n u m b e r round \\ number round number,给定一个区间 [ a , b ] [a,b] [a,b],求其中 r o u n d   n u m b e r round \\ number round number 的个数。

HDU 4151 The Special Number

链接:HDU 4151 The Special Number
题意:一个数字的十进制下的每个位都不同,则称为 S p e c i a l   N u m b e r Special \\ Number Special Number,求小于 n ( n < 1 0 8 ) n(n \\lt 10^8) n(n<108) 的数的个数。

PKU 3286 How many 0’s?

链接:PKU 3286 How many 0’s?
题意:统计区间 [ a , b ] [a, b] [a,b] 中的 0 的数量。

  • 首先利用差分法,用 g ( x ) g(x) g(x) 表示 [ 0 , x ] [0, x] [0,x] 0 0 0 的数量,答案就是 g ( b ) − g ( a − 1 ) g(b) - g(a-1) g(b)g(a1)
  • 这个题可以说是没有任何显式的约束条件,但是我们在统计的时候需要注意一个很重要的点,就是前导零是不能纳入统计的。所以在定义前缀状态的时候,对于一个长度为 n n n 的数字,我们可以分为 3 类:
  • 1)状态0: n n n 个 0 的情况;
  • 2)状态1: k ( k ≤ n − 1 ) k (k \\le n-1) k(kn1) 个 0 的情况;
  • 3)状态2:其它情况;
  • 状态转移如图所示:
0-9
0,n=1
0,n<>1
1-9
0-9
0
1
2
  • 对于一个数 x x x,如果前缀状态处于 状态0,那么很显然,这个值就是零,所以零的个数为1;如果处于 状态1,那么到目前为止都是前导零,不应该纳入统计;如果处于 状态2,假设第 k k k 位的零出现次数为 h ( k ) h(k) h(k), 则有:
  • h ( k ) = { 1 0 k − 1 l i m = t r u e x m o d    1 0 k − 1 + 1 l i m = f a l s e h(k) = \\begin{cases} 10^{k-1} & lim = true \\\\ x \\mod 10^{k-1} + 1 & lim = false \\end{cases} h(k)={10k1xmod10k1+1lim=truelim=false
  • 利用 数位DP 进行状态转移即可。

HDU 1663 The Counting Problem

链接:HDU 1663 The Counting Problem
题意:统计区间 [ a , b ] ( 0 < a , b < 1 0 8 ) [a, b](0 \\lt a, b \\lt 10^8) [a,b](0<a,b<108) 中每个数字的 [ 0 , 9 ] [0, 9] [0,9] 的数量。

  • 同 PKU 3286 How many 0’s

洛谷 P2602 数字计数

链接:洛谷 P2602 数字计数
题意:统计区间 [ a , b ] ( 0 < a , b < 1 0 12 ) [a, b](0 \\lt a, b \\lt 10^{12}) [a,b](0<a,b<10HDOJ3555解题报告

CF1073E Segment Sum 解题报告

[ [Ynoi2013] 无力回天 NOI2017 ] 解题报告

「解题报告」[luoguP6592]幼儿园 (DP)

解题报告树形DP入门

hdu 5375 - Gray code(dp) 解题报告