解题报告-论对“动态规划方程推导”的新理解
解题报告-论对“动态规划方程推导”的新理解
方程推导是动态规划的一大难点。其既要合法,又要有用,还要推正确。实际上,动态规划题就是一个方程。
今天晚上被这道题卡了 \(2\) 个小时。这其实就是一道朴素的线性动态规划题目,但是由于它的方程,使我最终没把这道题做出来。去看题解之后,才发现题解的思路竟然跟我一模一样。唯一不同的,就是方程的推导过程上。
这告诫我们不要眼高手低,\(\text{OI}\) 赛制下的做题方法在平时做题中并非没用。一开始,我就想到了一个 \(O(mt)\) 的线性状态表示,但是在此之后,我就一直在往 \(O(mt)\) 的方程上想,而不是从最低端的方程想起的。
反之,题解是这样的。题解先说了一个 \(O(t^2m)\) 的做法,就是从前面的状态中暴力转移。然后一步步优化,优化到了 \(O(mt)\)。下面其实还有优化,只不过因为 \(O(mt)\) 的算法已经能过,我就没有再往下看。这是第一点:方程要从最暴力的推起,优化是后面的事。
而我的算法的最重大失误是,没有给每一个 \(dp_i\) 设定初始值。在一些计数题中,确实可以不用设定初始值;但是在这种普通的线性动态规划中,由于我们要反复对 \(dp_i\) 取 \(\min\) 或者 \(\max\),所以一个初始值是十分必要的。这是第二点:一定要设置一个初始值,无论这个初始值多劣,只要合理且可以构造出对应方案,都要设置。
综上两点要说的都是:从最坏情况入手,后面慢慢优化,但是这个最坏情况一定是要有的。

浙公网安备 33010602011771号