4月10号 学习周总结
不知不觉dp的学习已经有两个周了。自己感觉还是不太行,不太好。尤其是对于dp的理解以及对状态方程的写出还是有一定的困难。因为状态转移方程是问题的关键核心与突破口,这个方程的写出不仅需要个人的思考与思辨能力还需要对代码有着良好的掌握。
其实我们大多数采用的还是倒推,就是逆向递推。有当前位置或状态来往前推,推到最后问题就很明了了。其实还有正向递推,大概是这种思考方向,状态方程不是很好写。
然后就是这个数据结构问题。dp中的数组其维度和下标都有其意义。有些时候涉及到了TLE就是结构考虑的不够好,像最大连续子列及各种派生问题。有时候数组没法开到很大,就需要把状态压缩,用最少的状态来表示每一个阶段的变化。就比如说学的滚动数组,其第二维中只开发两个空间,几艘换0或1轮流使用,但也要注意适用场合和其适用性。
其实做题中还涉及到一个很重的就是优化程序(这个太难了对我来说),毕竟不是所有题爆算都能OK的。就是优化空间复杂度与时间复杂度。可以通过降低循环次数以及用更好的思路写出更为精巧的状态转移方程。通常一般形式类似于dp[i][j]=dp[i-a][j-b]+c。一般都是多状态,所以涉及到最值或者最大值的最小值。
这周末要好好多做题了,这几天又是因为种种的事情没能每天看几个题,趁着周末可以加把力,但是不得不说这玩意是真的不容易弄明白现在和刚开始感觉也差不多能稍微感觉到了一些dp的味了,现在借助着题解努力找找感觉,多看看也多学学,继续努力吧,争取能早日明白。