1. 程式人生 > >王子和公主

王子和公主

特殊 時間復雜度 經理 目的 特殊性 速度 序列 比較 重新

題意簡化一下,這道題還是比較不錯的,雖然我還沒有實現過,不過我是已經理解了。

題意:有兩個長度分別為p+1和q+1的序列,每個序列中的各個元素互不相同,且都是1-n^2之間的整數,兩個序列的第一個元素均為1,求A和B的最長公共子序列的長度。

T<=10

2<=N<=250

這道題是一道LCS的題,但是最快的LCS的速度也為O(pq)62500^2這個是過不了的,所以從題目的特殊性考慮如何解這道題,發現序列中的各個元素互不相同,這有什麽用呢?

可以將它重新標號,如A={1,7,5,4,8,3,9},B={1,4,3,5,6,2,8,9},A重新標號為1-p則B={1,4,6,3,0,0,5,7},0表示沒有出現過因此是沒有用的,直接刪除也沒什麽事,然後發現求LCS

也就是求一次B中的LIS,因為A重新標號後是1-p的而B是以A的序號來標記的,所以可以這樣轉為。

重新標號-LCS---LIS

時間復雜度就變為O(n log n)

王子和公主