码迷,mamicode.com
首页 > 其他好文 > 详细

【数位DP】题集

时间:2018-08-14 21:01:13      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:数位dp   输出   数据   题意   href   题集   http   hdoj   区间   

1.HDOJ2089
题意:求区间内不出现4和62的数的个数
解法:模板题

2.HDOJ3555
题意:求区间内不出现49的数的个数
解法:模板题

3.HDOJ5179
题意:对于一个十进制数,把每一位拆出来变成一个数组,要求数组右边的数都小于等于左边的数,且左数能整除右数。求区间内满足条件的个数
解法:dp[i=20][j=10]: j为前一位上的数
按要求转移即可,要考虑前导零,注意防止%0的情况出现

4.HDOJ3652
题意:求区间内含13或者是13倍数的数的个数
解法:dp[i=20][j=13][k=3]: j为对13的余数,k为状态(0: 前一位不是1 | 1: 前一位是1 | 2: 前面出现过13)
最后当j为0,k为2时加入计数,计算不含13并且不是13倍数的数
输出时为{N+1-solve(N)} (0也在统计内)

5.HDOJ3709
题意:定义平衡数,以某一数位作为原点,左边数位上{数字 × 距离}之和与右边数位上的相等。求区间内平衡数的个数
解法:dp[i=20][j=5000][k=20]: j为左边数位权值之和,k为枚举的原点
需要枚举原点,然后统计左边权值的减去右边的权值最后是否为零,由于 0 对于每个枚举位置都会被统计,最后要再减去{枚举次数 - 1}个重复的0

6.HDOJ6148
题意:对于一个十进制数,要求从左到右的数位没有出现先递增接着递减的情况,求区间内满足条件的个数
解法:dp[i=105][j=10][k=2]: j为前一个数,k表示前面是否已出现递增
按要求转移即可,要考虑前导零,这题的0是不合法的,额外减1就行了,注意数据范围10^100

7.HDOJ5898
题意:对于一个十进制数,要求数位中奇数段长度都为偶数,偶数段长度都为奇数,求区间内满足条件的个数
解法:dp[i=20][j=10][k=20]: j为前一个数,k为前一个数所属段的长度
要考虑前导零,转移时,当前数位若与前一位奇偶相反,表示前一段已结束,判断长度是否满足要求剪枝,并重置k为1继续向下枚举,最后统计时还要再判断一次j与k,奇偶相反则加入统计

【数位DP】题集

标签:数位dp   输出   数据   题意   href   题集   http   hdoj   区间   

原文地址:https://www.cnblogs.com/stolf/p/9477411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!