【JZOJ5183】小T的钢琴

题目大意

给出一个数组S,和n个数组Ti,S数组中每个数最多出现一次,求出每个T数组与S数组最长公共子序列。
S字符串数<=100000
T字符串数<=200000
n<=5
字符串数<=10

分析

最长公共子序列常规做法是O(n^2)的。
超时。

观察发现,S数组中每个数最多出现一次。
所以呢?

结论1:T数组中的每个数都能找到S数组中找到的唯一对应。

那我们就从T数组寻求突破。
那就把T数组每个数连接上其对应的数。

结论2:那么T数组上一条子序列是合法的,就要满足子序列的每个数对应到S数组的位置是递增的。

综上,S与T的最长公共子序列即为T串每个字符在S串中对应位置的最长不下降子序列。

求每个T串的最长不下降子序列即可。

总结

推结论啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值