【動態規劃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的公共數字
而選擇單調遞增的數字則能保證子序列的性質。
之後就很簡單了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章