基础数位DP小结
HDU 3555 Bomb
dp[i][0] 表示含 i 位数的方案总和。
sp[i][0] 表示对于位数为len 的 num 在区间[ 10^(i-1) , num/(10^(len-i)) ] 内的方案数。
对于dp[i][3],dp[ i ][ 0 ]表示位数为 i 且含49的方案数,dp[ i ][1]表示位数为 i 且不含49 且末尾不为4的方案数,dp[ i ][2]表示位数为 i 且不含49且末尾为4的方案数。
对于sp[ i ][3]。意义同样,仅仅只是要推断i-1位时的上界出如今哪一种情况内,在讨论当前位上数字的大小。
HDU 2089 不要62
dp[ len ][ 2 ] [ 2 ][ 2 ] len表示数的长度,第二维表示在此位上是否到达上界。第三维表示前一位是否为 6 ,第四维表示前面是否出现62 或 4 。
记忆化搜索。真心是模板题。数据也非常弱,包搜才300+ms。
HDU 3652 B-number
与上面的题类似吧,同属模板一级的题。
dp[ len ][2][2][2][13] len表示数的长度,第二维表示在此位上是否到达上界,第三维表示前一位是否为 1 ,第四维表示前面是否出现13。第五维标记当前状态的对13取余的余数 。
CF 55D Beautiful Number
虽说不是自己做的,可是学到了不少东西。对于DP的两种写法——递推和记忆化搜索也略有感悟。困了。明天补题解。
————————————————————
首先科普一个知识点。设a。b,c。若a%b == 0,b%c == 0,则必有a%c == 0。
换言之。c = LCM(a,b),若x%c == 0,则必有x%a == 0 ,x%b == 0。
反之。若x%c != 0,则 x 必不能同一时候被a,b整除。
对于 1 到 9 这九个数的LCM为2520,而1 到 9这几个数的随意组合则有48个不同的最小公倍数。
也就是说仅仅需记录(x % 2520)和 出现的数字的最小公倍数。
另外还需位数和是否到达上界,则dp数组为 dp[ 2 ][ len ][2520][49]。
第一维表示是否到达上界。
第二维表示要求数字的长度。
第三位表示对2520的余数。
第四维表示前面出现的数相应着哪个最小公倍数。
除去48个最小公倍数外,还应记录 0 的情况。
总的时间复杂度即为 2*len*2520*49。
对于递推:
dp表示前 i 位的情况。即由前 i 位的情况推出 i+1 的情况。
显然,当前面的数变了之后,后面的也必定会改变。
所以每次都会从头到尾又一次递推计算一遍。
时间上承受不了。
对于记忆化搜索:
dp记录第 i 位到 len位的状态。即由子状态回溯得到母状态。
显然此时当前面的数改变了之后并不影响后面的状态。
对于此题。每当给出一个新的x,那些到达上界的情况会改变。而没有到达上界的情况不会发生改变。
所以对于新的x。我们仅仅须要计算到达上界的那些情况就可以。
时间复杂度降到了len*2520*49。
全然能够过了。
URAL Amount of Degrees
表示真没看懂题,第一次在Ural上看见这么坑的题。
求在[X, Y]中的数的B进制仅仅有K为不为0,且这K位必须为1。
我仅仅想问一下题目中哪句说为1。
剩下的就是简单的模板了。
HDU 4389 X mod f(x)
dp[len][ i ][ j ][ k ] 第一维表示长度。第二维表示各位之和。第三维和第四维的意义表示x % j == k。
之前的几个题看别人的代码始终没搞明确为神马dp数组里面没有表示是否达到上限的一维。
今天做这个题最终顿悟了。
达到上限仅仅会造成后面的几项取不到。是未到上限的情况的子集。
所以我们仅仅要处理出未到的情况就可以。
HDU 4352 XHXJ's LIS
必需要说一下关于最朴素的LIS的两种算法。
一种是复杂度为 o(n^2)。len[i]通过与前 i-1的比較来更新,不多说了。
还有一种是复杂度为 o(n*log(n))。数组c[len] 表示当更新到第 i 位时。长度为len的位置处的最小值。
当更新到num[ i ]仅仅需二分查找最小的满足c[site] >= num[i]的site。然后更新c[ site ]。
若未找到则仅仅需将num[ i ]放入c[ ]末尾。
显然此题仅仅需标记当dfs到site时,c[ ] 里面记录了那些元素就可以。
HDU 4737 F(x)
首先计算出F(A)。然后对site 和 F(A) dfs,入门级别的题吧。刷起来蛮顺手的。
ZOJ 3416 Balanced Number
dp[ site ][piv][sum] 表示位置。对称轴。累加和。
開始时。dp[site][L][piv][R] L表示左边的和,R表示右边的和。MLE了两次。事实上能够用sum = L-R表示,脑子还是不够活。
基础数位DP小结的更多相关文章
- hdu2089:不要62(基础数位dp)
题意:规定一个合法的号码不能含有4或者是连续的62 给定区间[n,m] 问此区间内合法的号码的个数 分析:数位dp dp[i][j]代表 最高位为 j 的 i 位数有多少个合法的 然后按题目规则进行转 ...
- 数位dp小结
数位dp其实就是一种用来求区间[l, r]满足条件的数的个数.数位是指:个十百千万,而在这里的dp其实相当于暴力枚举每一位数. 我们通过把l, r的每位数分解出来,然后分别求r里满足条件的数有多少,l ...
- 数位dp小结以及模板
这里是网址 别人的高一啊QAQ.... 嗯一般记忆化搜索是比递推好写的所以我写的都是dfs嗯......(因为我找不到规律啊摔,还是太菜.....) 显然这个东西的条件是非常的有套路..但是不管怎么样 ...
- 基础树形DP小结
HDU 4044 Geodefense http://blog.csdn.net/zmx354/article/details/25109897 树形DP暂且先告一段落了. HDU 3586 Info ...
- Poj-3286- How many 0's? - 【基础数位DP】
How many 0's? Description A Benedict monk No.16 writes down the decimal representations of all natur ...
- HDU 4507 (鬼畜级别的数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意:求指定范围内与7不沾边的所有数的平方和.结果要mod 10^9+7(鬼畜の元凶) 解题 ...
- HDU5787 K-wolf Number 数位dp
分析:赛场上也知道是裸的数位dp,但是无奈刷数位dp题刷的太少了,并不能写出来 一点感想:赛后补题,看了题解的map记录状态,一脸蒙逼,也是非常的不爽,然后想看别人写的,不是递归就是写的比较乱 而且我 ...
- 「kuangbin带你飞」专题十五 数位DP
传送门 A.CodeForces - 55D Beautiful numbers 题意 一个正整数是 漂亮数 ,当且仅当它能够被自身的各非零数字整除.我们不必与之争辩,只需计算给定范围中有多少个漂亮数 ...
- 数位DP之小小结
资料链接:http://wenku.baidu.com/view/9de41d51168884868662d623.html http://wenku.baidu.com/view/d2414ffe0 ...
随机推荐
- robot framework环境配置
1.Robot framework的安装 作用:web自动化测试框架. RF框架是基于python 的,所以一定要有python环境.网上可以自行查找. 下载地址:https://pypi.pytho ...
- 24岁菜鸟,能一个人撑起App开发吗
"疲惫吾心.怎样躲藏.四处荒芜,怎话忧伤?"临近中秋,看到艾瑞斯的QQ签名,无尽的伤感.这个年仅24的青年.连续3年没有回家了,近期一个月总是失眠,没有家人的陪伴,就连女朋友 ...
- 并行编程(1) - sum.msic.Unsafe 一
相信看过java源代码的同学.对 sum.msic.Unsafe 这个类并不陌生,特别是在java.util.concurrent包有非常多的使用. sum.msic.Unsafe源代码: ...
- 多线程编程TSL相关的技术文档
线程本地存储 (TLS) https://msdn.microsoft.com/zh-cn/library/6yh4a9k1(v=vs.80).aspx Using Thread Local Stor ...
- 0x41 并查集
太菜了才做到并查集啊啊啊啊啊啊啊啊啊啊啊 还是很有收获的说 水 bzoj4195: [Noi2015]程序自动分析 好题 poj1456 感受到并查集传递性的美妙啊!对于一个商品,去找他过期前那天的集 ...
- bzoj3998: [TJOI2015]弦论(SAM+dfs)
3998: [TJOI2015]弦论 题目:传送门 题解: SAM的入门题目(很好的复习了SAM并加强Right集合的使用) 其实对于第K小的字符串直接从root开始一通DFS就好,因为son边是直接 ...
- 杂项-项目管理:WBS(工作分解结构)
ylbtech-杂项-项目管理:WBS(工作分解结构) WBS:工作分解结构(Work Breakdown Structure) 创建WBS:创建WBS是把项目 交付成果和项目工作分解成较小的,更易于 ...
- golang sftp传输文件
之前有一篇介绍如何使用 golang 通过SSH协议来执行远程命令:golang执行远程命令 同样,通过SSH协议也可以使用 golang 来远程传输文件. 除了 SSH 的库,为了传输文件,还需要用 ...
- easyui 之表单验证
/** * 扩展easyui的validator插件rules,支持更多类型验证 */ $.extend($.fn.validatebox.defaults.rules, { minLength : ...
- Spark的数据存储(十九)
Spark本身是基于内存计算的架构,数据的存储也主要分为内存和磁盘两个路径.Spark本身则根据存储位置.是否可序列化和副本数目这几个要素将数据存储分为多种存储级别.此外还可选择使用Tachyon来管 ...