您的位置:首页 > 其它

【动态规划14】UVA10635 Prince and princess(LCS转LIS)

2017-06-12 10:24 309 查看
偶然看到的一道题,感觉做法很有意思。

题目大意

求两个数列a[p],b[q]的LCS,其中数的值域为1~n*n且没有任何两个数字是相同的,且两个数列的首位皆为1。

这道题的数据范围很大,对于普通的O(n^2)的算法来讲,时间复杂度是很大的。

然而这道题有着特殊的条件,那就是没有任意两个数字是相同的。

那么我们可以考虑如果将b中数字在a中出现的位置替换为b的值,那么显然b的LIS就是a和b的LCS。

只看这句话可能不太好理解(我表达太差)

举个栗子。

样例中

a[7]={1,7,5,4,8,3,9}

b[8]={1,4,3,5,6,2,8,9}

将b的值替换

b[8]={1,4,6,3,0,0,5,7}(0表示没出现过)

这时候从b中选出的所有不为0数字都能保证是a,b的公共数字

而选择单调递增的数字则能保证子序列的性质。

之后就很简单了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: