Q: http://uva.onlinejudge.org/external/109/10949.html

 

UVA 10030, UVA 10807 之後

又一個在網路上毫無詳解的題目

 

這題乍看之下很簡單,就只要求LCS的長度之後

再用字串一和字串二的長度去扣掉LCS的長度即可

問題是這題的字串長度給到20000

用O(n^2)的LCS解法會TLE

在網路上找了好久之後終於找到演算法筆記裡的介紹:

Longest Common Subsequence:  Hunt-Szymanski Algorithm

這個演算法是先把 LCS 問題看成二維 LIS 問題

再把二維 LIS 問題轉成一維 LIS 問題

然後用 Robinson-Schensted-Knuth Algorithm 來算 LIS

得到的長度即為LCS的長度

可有效減少計算複雜度

 

輸入的時候要小心不要把不相關的字元也讀進去了

根據題目要求建立好兩個字串之後

先判斷字串長度, 再丟進函式計算LCS的長度

最後將長度相減,即可得到答案

 

 

這題寫到最後有點沒耐心了

所以也不強求速度了

有過就好 

 

arrow
arrow
    文章標籤
    ACM UVA 程式 DP
    全站熱搜
    創作者介紹
    創作者 Tube 的頭像
    Tube

    Tube's World

    Tube 發表在 痞客邦 留言(0) 人氣()