两条廊都是编号序列,允许跳过,不允许对调先后。要的是最长公共子序列的长度,用动态规划即可。
美术馆有东廊、西廊两条参观路线。每件展品用一个小写拉丁字母当编号,同一条廊里编号可以重复,重复只表示编号相同,仍然是不同的展品。
从每条廊里按从左到右的原有先后挑出若干件,挑出的编号序列必须完全一样。可以跳过不选的展品,但不能把已选展品的左右次序对调。在这个限制下,最多能挑出多少件。只报件数。
第一行一个整数 u,表示东廊的展品件数。
第二行有 u 个小写字母,中间用一个空格隔开,从左到右是东廊编号。u=0 时这一行是空行。
第三行一个整数 v,表示西廊的展品件数。
第四行有 v 个小写字母,中间用一个空格隔开,从左到右是西廊编号。v=0 时这一行是空行。
0≤u≤20,0≤v≤20。
每个编号都属于 a 到 z。
输出一行一个整数,表示最多能同时按原有先后挑出的件数。
5
d a b c a
4
a c b a
3
说明
东廊是 d,a,b,c,a,西廊是 a,c,b,a。可以挑 a,b,a:东廊取第 2,3,5 件,西廊取第 1,3,4 件。也可以挑 a,c,a。四件凑不齐,答案是 3。
3
a b c
3
c b a
1
说明
两条廊的编号集合相同,但西廊把先后完全倒过来了。a,b,c 不能按同一套次序在两边都成立,只能留下单独一件,答案是 1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册