数位DP

一年前刷的一道题,现在看来挺简单的。贴在下面。

当我们遇到一个问题,求解的是从n到m(n<m)内,不含的某个数的数字的集合时,我们通常首先想到的都是,从n到m一个数一个数的枚举,分别取检测其中是否含有某个特定的数字。例如我们要求取从1到100之间,不含4的数。我们很容易想到要去对每个数字去检验。这看起来似乎很复杂。为解决这个问题,于是,我们有了“数位DP”。

hdu 2089 不要62

Problem Description
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有4或62的号码。例如:
62315 73418 88914
都属于不吉利号码。但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。
Input
输入的都是整数对n、m(0<n≤m<1000000),如果遇到都是0的整数对,则输入结束。
Output
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
Sample Input
1 100
0 0
Sample Output
80

具体看题。

我们要从n到m之间找出不含4和62的数字。首先是不含4的,这个只需要逐个枚举,然后对比,再用DP存储起来就可以了。其次是62。62稍微特殊一点,因为它要先判断上一位是否是6,如果是6再接着判断下一位是否满足是2。

以下为AC代码:

在这次牛客新手赛中,也有一道类似的题目,相比之下要简单点,dp只需要开一维数组就够了。

题目描述

经过了选号和漫长的等待,处女座终于拿到了给小姐姐定制的手环,小姐姐看到以后直呼666!

处女座其实也挺喜欢6这个数字的,实际上他做手环的时候选取的k=6。所以他对于包含数码6的数字极其敏感。每次看到像4567这样的数字的时候他的心就像触电了一样,想起了小姐姐。

现在你要给处女座展示一系列数字,你想知道他的内心会激动多少次。对于同一个数字,他最多只会激动一次,即如果这个数是66666,他还是只会激动一次。
输入描述:
一行包括两个数字l,r,表示你给处女座展示的数字范围为[l,r]。
输出描述:
一行一个整数,表示处女座内心激动的次数。
示例1
输入

复制
10 20
输出

复制
1
备注:
0

l

r

10
18

AC代码(把上题代码改改就可以):

posted @ 2020-03-20 17:22  吉姆雷诺  阅读(114)  评论(0编辑  收藏  举报