数位dp小结:
1、问题特点
①一般来说是求某个区间内的符合与每一数位有关的性质的数个个数
②数据范围在1e9以上,即区间很大
③求区间内第几个①条件的数,通常是再套个二分
2、感悟总结
①实际上是一种特殊的记忆化搜索,记忆的状态与每一数位有关
②根据题目特点将数拆成k进制形式,通常下界为0(如果不是下界就再开一个数组表示下界),ans(l,r)=ans(r)-ans(l-1)
③进行状态表示时,注意同一层的状态不能相交,且并起来就是所有状态(不漏不重复)。每一维的表示都与题目要求的数的性质有密切联系
④注意是从高位到低位进行搜索还是反着的
⑤最重要的难点还是状态的表示即转移,需要在大量的练习中慢慢体会
状压dp小结:
1、问题特点
①一般来说是求最优值或者合法解的个数
②某个数据范围在20以内
③状态压缩只是一种状态表示方法,能灵活与其他知识点结合使用
④注意是几进制压缩(通常为二进制)
2、感悟总结
①通常有两种方法进行状态转移,即dfs或for循环,具体用哪个视题目而定
②状态比较多时,可以先预处理合法状态(如果预处理复杂度也较高,可以考虑使用二分、hash等算法优化)
③对不合法状态进行剪枝可以大大提高程序效率
④无论是几进制压缩,都要注意状态的变化情况,有的题目会卡内存就要考虑是否使用滚动数组
⑤我个人是比较喜欢这个算法的,主要在于喜欢它状态表示的神奇。最重要的难点还是状态的表示即转移,还是一样需要在大量的练习中慢慢体会