[挖坑] dp思想杂记

[挖坑] 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的算。

实现难点:脑子还是不太清楚,有空自己做一遍

posted @ 2021-06-30 13:54  Flandre-Zhu  阅读(77)  评论(0编辑  收藏  举报