「BalticOI 2020」病毒

AC自动机+DP最短路转移

怎么说呢,挺套路的,也不是太难,但是一上手会被大量的信息淹没思路,还是要注意关注主要信息,不要被一些细节卡住

由于抗体是要在基因序里面出现过,那么考虑把抗体的序列检出AC自动机

然后是经典套路要设在AC自动机上从$j$点出发到$k$点的DP

但是直接DP不好DP

考虑一种突变表是如何计算的,是从前往后不断用单个数字进行扩展,那么这就提示我们记录每一个突变表的前缀和单个数字的信息

那么给其标号,令单个数字的标号就是自己,以方便下文叙述

那么有这样几种转移

$dp[i][j][k]+dp[num][k][p]->dp[i+1][j][p]$,$num$为$i+1$号前缀的最后一个数字(相当于是往后填数字),注意这个转移不仅是要更新到数字的时候需要转移,更新到某一个前缀的时候也需要转移

$dp[i][j][k]->dp[num][j][k]$,$i$为一个完整的突变表,$num$为这个突变表所形成的数字

$dp[num][j][k]->dp[i][j][k]$,$i$为突变表的第一个前缀,$num$为第一个数字

然后转移即可

代码

posted @ 2020-10-28 22:27  SevenDawns  阅读(313)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end