11月12日

这三天做的数位dp题,首先是Apocalypse Someday这道题,题意是找出第n个包含666的数字。这道题本来想用二分加数位dp写的,但感觉老是套模板也不是很好,于是用了另一种方法的,首先要进行状态压缩,用0表示没有,用1表示有6,用2表示有66,用3表示有666。 dp[i][j]表示第i位状态为j时能得到包含666数字的方案数,那么枚举当前位置选多少来进行状态转移即可。 输出方案先找到位数,然后逐位确定并且状态也进行逐位更新。然后做n题,Beautiful numbers EXTREME,题意是求一个区间内的Beautiful numbers有多少个。Beautiful numbers指:一个数能整除所有组成它的非0数字。首先数据的范围太大根本无法记录。所以要缩小范围。我们可以发现所有个位数的最小公倍数是2520,而在逐位统计时,可以直接由前面位取余后的值来得到包含新一位的新数字取余后的值。然后可耻的tle了,经过研究还要进行离散化,因为1~9组成的最小公倍数只有48个,这样进行可以离散化。结果交的时候发现还有代码长度限制,简直了,吧数据改了改,头文件换成万能的终于在缺了两个字符的情况下a了。再做N题途中做了b,The Sum这道题,题意是给你一个正整数N,依次把1到N写下来,在每两个数字之间交替的加上+,-号,求这个表达式的值。这个要分成奇偶统计,奇数项偶数项有两个递归方式。然后是Bi-peak Number 这道题,受苦了,题意是定义"特殊数"为两次先上升后下降形成的数,且第一位大于等于0,没有前导零,问所有满足条件的数中,位数和最大的是多少。这个题好多中情况啊,用dfs的写法写漏了一千种情况的。接着看Mirror Number 这道题,求[a,b]中镜像回文的个数。 也是dfs的写法不过要多加两个变量,一个是开始的位置,一个是判断是不是镜像回文,  用一个tmp来储存已经放的数字来判断是不是回文。最后看的K-th Nya Number 这道题,给定X和Y的值,一个数字用十进制表示,对于数位4出现恰好X次,7恰好Y次的数字称为nya数。  然后给P和Q, 后面是一系列查询, 每个查询K就是在区间(P,Q]上找到第K个nya数,不存在则输出Nya!就是数位dp加二分的写法啊,从高到低依次确定各个位的数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值