解题报告 (十四) 数位DP
Posted 英雄哪里出来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告 (十四) 数位DP相关的知识,希望对你有一定的参考价值。
文章目录
- 数位DP 解题报告
- HDU 4722 Good Numbers
- HDU 2089 不要62
- HDU 3555 Bomb
- HDU 3652 B-number
- PKU 3252 Round Numbers
- HDU 4151 The Special Number
- PKU 3286 How many 0's?
- HDU 1663 The Counting Problem
- 洛谷 P2602 数字计数
- 洛谷 P2657 windy 数
- 洛谷 P3413 萌数
- 洛谷 P6754 Palindrome-Free Numbers
- 洛谷 P4317 花神的数论题
- HDU 5898 odd-even number
- HDU 4734 F(x)
- HDU 6148 Valley Numer
- HDU 5179 beautiful number
- 洛谷 P4124 手机号码
- 洛谷 CF855E Salazar Slytherin's Locket
- 洛谷 P6371 V
- 洛谷 P4127 同类分布
- HDU 5787 K-wolf Number
- PKU 3208 Apocalypse Someday
- HDU 5965 扫雷
- HDU 5456 Matches Puzzle Game
- HDU 3709 Balanced Number
- HDU 4507 吉哥系列故事——恨7不成妻
- HDU 4352 XHXJ's LIS
- 洛谷 CF55D Beautiful numbers
- HDU 5676 ztr loves lucky numbers
数位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](0≤l≤r≤1018) 内 g o o d n u m b e r good \\ number good number 的个数;
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题1】的讲解。
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] 中非不吉利数字的个数。
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题2】的讲解。
HDU 3555 Bomb
链接:HDU 3555 Bomb
题意:给定一个 n ( 1 ≤ n ≤ 2 63 − 1 ) n(1 \\le n \\le 2^{63}-1) n(1≤n≤263−1),求小于等于 n n n 的数字中包含 49 的数的个数。
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题3】的讲解。
HDU 3652 B-number
链接:HDU 3652 B-number
题意:一个数的十进制包含子串 “13” 并且能被 13 整除,则被称为 B数,求小于等于 n ( n ≤ 1 0 9 ) n(n \\le 10^9) n(n≤109) 的 B数。
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题4】的讲解。
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 的个数。
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题5】的讲解。
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) 的数的个数。
- 题解参考 夜深人静写算法(二十九)- 数位DP 中【例题6】的讲解。
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(a−1)。
- 这个题可以说是没有任何显式的约束条件,但是我们在统计的时候需要注意一个很重要的点,就是前导零是不能纳入统计的。所以在定义前缀状态的时候,对于一个长度为 n n n 的数字,我们可以分为 3 类:
- 1)状态0: n n n 个 0 的情况;
- 2)状态1: k ( k ≤ n − 1 ) k (k \\le n-1) k(k≤n−1) 个 0 的情况;
- 3)状态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)={10k−1xmod10k−1+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解题报告