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

偶然看到的一道题,感觉做法很有意思。

题目大意

求两个数列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的公共数字
而选择单调递增的数字则能保证子序列的性质。
之后就很简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值