今天翻看数位dp的课件,有些类型也有了自己的理解,基本上能够出几道题了,
像这个专题的题也是有模板题的,有的是加个简单的二分然后直接套模板就可以
有的也需要思考很多方面,有上限有下限了,条件稍不留神就容易看错导致出不题
1.数位DP需要较为熟练的记忆化搜索作为基础,虽然有的题可以直接用循环进行状态转移,但记忆化搜索的状态转移更常用更容易理解
2.时刻记住:abcd这个四位数 = a*1000+b*100+c*10+d
3.关于dp状态的保存,一般一维都是保存数字在整个数中的位置(数位),然后根据题目给定的数字的性质确定二维三维要保存什么状态
感觉数位DP的关键就在于状态的保存(当然状态转移也很重要)一般而言,dp[i][j][k]表达的信息是:具有i性质,j性质,k性质的数的个数
4.在记忆化搜索的过程中,对于数字abcd,搜索是从左往右搜索,但实际上计算是从右往左计算的(递归原理)
5.数位DP需要注意所搜索的范围不能大于原本被视作字符串的那个数字(这个在记忆化搜索中常表现为一个变量标记上界)
同时有时候0的情况也需要特别注意(具体情况具体分析吧)
6.数位DP刚刚入门的时候觉得很难,做多了觉得万变不离其宗,代码长得都差不多,都是套路,唯一的变化也就是定义的数的属性不一样
所以感觉数位DP的难点也就是状态的保存,针对题目给的性质保存相应的状态
7.多做题 多做题 多做题
推荐几个博客,感觉很不错
http://blog.csdn.net/wust_zzwh/article/details/52100392
https://www.cnblogs.com/zbtrs/p/6106783.html