「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$为第一个数字
然后转移即可