51nod 1006 最長公共子串行Lcs DP

2021-09-22 02:03:22 字數 1008 閱讀 5474

1 秒 / 131,072 kb / 基礎題

給出兩個字串a b,求a與b的最長公共子串行(子串行不要求是連續的)。

比如兩個串為:

abcicba

abdkscab

ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。

第1行:字串a

第2行:字串b

(a,b的長度 <= 1000)

輸出最長的子串行,如果有多個,隨意輸出1個。

abcicba

abdkscab

abca

題目。

解題時卡在沒有想到好的方法輸出路徑(我用dfs一直錯)。辦法:記錄路徑。

#include

#include

#include

using namespace std;

string a,b,ans;

const int max_num=

1e3+17;

int dp[max_num]

[max_num]

,book[max_num]

[max_num]

;//book記錄方向

int main()

else

if(dp[i-1]

[j]>dp[i]

[j-1])

else}}

bool flag=

false

;for

(int i=la;i>0;

)}else

if(book[i]

[j]==1)

}else}}

if(flag)

break;}

/*for(int i=0;i<=la;++i)

printf("\n");

for(int i=0;i<=la;++i)*/

cout

}

51Nod 1006 最長公共子串行Lcs(DP)

給出兩個字串a b,求a與b的最長公共子串行 子串行不要求是連續的 比如兩個串為 abcicba abdkscab ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。input 第1行 字串a 第2行 字串b a,b的長度 1000 output 輸出最長的子串行...

51nod 1006 最長公共子串行Lcs

給出兩個字串a b,求a與b的最長公共子串行 子串行不要求是連續的 比如兩個串為 abcicba abdkscab ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。input 第1行 字串a 第2行 字串b a,b的長度 1000 output 輸出最長的子串行...

51nod1006 最長公共子串行Lcs

思路 定義dp i j 為a串以i結尾,b串為j結尾的子串行的最長公共子串行長度,則 if a i a j dp i j dp i 1 j 1 1,else dp i j max dp i 1 j dp i j 1 這題的話 還需要記錄長度為dp i j 的公共子串行選自哪些位置,詳情看 ac 我的...