题目大意
给出一个数组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串的最长不下降子序列即可。
总结
推结论啊!!!