今天没有考试,也就不分上午下午了。
今天的主要内容是状压dp、数位dp和dp优化。状压dp可以解决状态复杂的情况。它的基本思路就是把某一个复杂的状态压缩成一个二进制数保存在某一维里面。这样我们就可以方便的进行转移而不用像d[i][j][k][l][m][n][o][p][q]......这样反人类的转移。但是因为位数和其它一些原因,状压dp能解决的数据规模往往很小(参见某年pj组货郎挑担问题)(当然一些神题除外)。然后就是数位dp。数位dp的主要功能是求区间[L, R]里满足某种条件的数的个数。方法就是按位dp,但对于不同的问题转移方程有所不同。接下来就是今天的重点,也是最难的部分——dp的优化。dp的优化今天讲了三种,分别是单调队列优化、斜率优化、矩阵乘优化。有些dp的某些值满足单调性,所以我们就可以用一个单调队列来优化它,使得复杂度大大降低。然后斜率优化呢比较考验计算能力,简单的来说就是转化式子是它看起来像斜率小于某个单增/减的值,这样就可以通过类似凸包的方法进行O(1)的转移。矩阵乘优化利用了一些矩阵特有的性质,通过快速幂来用O(log)的时间解决问题。
这几种dp/dp优化都需要大量练题才能良好掌握,明天放假一天,要好好利用。