2019年4月10日训练日记

数位dp小结:

1、问题特点

①一般来说是求某个区间内的符合与每一数位有关的性质的数个个数

②数据范围在1e9以上,即区间很大

③求区间内第几个①条件的数,通常是再套个二分

2、感悟总结

①实际上是一种特殊的记忆化搜索,记忆的状态与每一数位有关

②根据题目特点将数拆成k进制形式,通常下界为0(如果不是下界就再开一个数组表示下界),ans(l,r)=ans(r)-ans(l-1)

③进行状态表示时,注意同一层的状态不能相交,且并起来就是所有状态(不漏不重复)。每一维的表示都与题目要求的数的性质有密切联系

④注意是从高位到低位进行搜索还是反着的

⑤最重要的难点还是状态的表示即转移,需要在大量的练习中慢慢体会

状压dp小结:

1、问题特点

①一般来说是求最优值或者合法解的个数

②某个数据范围在20以内

③状态压缩只是一种状态表示方法,能灵活与其他知识点结合使用

④注意是几进制压缩(通常为二进制)

2、感悟总结

①通常有两种方法进行状态转移,即dfs或for循环,具体用哪个视题目而定

②状态比较多时,可以先预处理合法状态(如果预处理复杂度也较高,可以考虑使用二分、hash等算法优化)

③对不合法状态进行剪枝可以大大提高程序效率

④无论是几进制压缩,都要注意状态的变化情况,有的题目会卡内存就要考虑是否使用滚动数组

⑤我个人是比较喜欢这个算法的,主要在于喜欢它状态表示的神奇。最重要的难点还是状态的表示即转移,还是一样需要在大量的练习中慢慢体会

你可能感兴趣的:(动态规划,训练日记,状态压缩dp,数位dp)