[挖坑] dp思想杂记
听了一中午的课,思想懂了一些,但是写代码好像不太会写。先把思想记一下,等以后有空了,来实现一波。
这样也是为了给我一些心理安慰,让我感觉“好像”这个中午没浪费。
TCO13 OneBlack
首先我们拿dp套dp的思路来搞这个题,我们需要记录位置 ((i,j)) 与轮廓线上的内层dp值。但是轮廓线长度到了30,记不下,怎么办?
我们发现这个内层dp数组,在两个障碍物之间,具有单调性,即:一定是一堆0+一堆1
那我们对于每两个障碍之间都记一个分界点,点前(<=)是0,点后(>)是1。这个状态数,最坏情况就是障碍物一隔一的,有 (2^{m/2}) 个状态 —— 它正好能记了。这样我们的复杂度就变成 (O(nm2^{m/2})) 了。
实现难点:尽管我们证明了状态数有限,但是,咋表示?哈希?
TCO12 EvenPaths
我们把 (k) 个障碍点,按拓扑序排序后,分成前一半和后一半。
对于前一半和后一半,我们都枚举每个点是不是障碍,然后算:(0) 到它不经过障碍的方案,它到 (1) 不经过障碍的方案,然后把两边用 FWT 卷起来就行了。算一边就dp套dp的算。
实现难点:脑子还是不太清楚,有空自己做一遍