码迷,mamicode.com
首页 > 其他好文 > 详细

最长公共子序列

时间:2019-04-11 23:22:29      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:task   sub   转移   范围   连续   class   nbsp   c中   效率   

最长公共子序列

给四个长度为 $n$ 的序列 $ \{a_i\},\{b_i\},\{c_i\},\{d_i\}$。求这四个序列最长公共子序列的长度。

子序列为原序列删去若干位置后剩下的序列,可以不用连续,例如$ \{1,2\},\{1,3\}$ 均为 $ \{1,2,3\}$。

 

数据范围
对于所有数据:$ 1 \le n \le 10000,1 \le a_i,b_i,c_i,d_i \le n $,$\{a_i\},\{b_i\},\{c_i\} $ 任何数字出现次数都 $ \le 2$ 次。

Subtask 1(30%) : $ n \le 50$

Subtask 2(40%) : $\{a_i\},\{b_i\},\{c_i\},\{d_i\}$ 为1 到n排列。

Subtask 3(30%) : 无特殊性质。

 


Sol

考虑dp,f[i][0/1][0/1][0/1]表示d中匹配到第i位,abc中匹配的是前一个还是后一个的最长公共子序列。

效率64*n*n,T了

我们发现当abcd四维都小于时才可以转移。

那我们们就四维偏序cdq维护。

 

最长公共子序列

标签:task   sub   转移   范围   连续   class   nbsp   c中   效率   

原文地址:https://www.cnblogs.com/liankewei/p/10693321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!