nyoj36最長公共子串行

2021-08-07 05:55:08 字數 952 閱讀 2737

描述

咱們就不拐彎抹角了,如題,需要你做的就是寫乙個程式,得出最長公共子串行。

tip:最長公共子串行也稱作最長公共子串(不要求連續),英文縮寫為lcs(longest common subsequence)。其定義是,乙個序列 s ,如果分別是兩個或多個已知序列的子串行,且是所有符合此條件序列中最長的,則 s 稱為已知序列的最長公共子串行。

輸入

第一行給出乙個整數n(0

輸出每組測試資料輸出乙個整數,表示最長公共子串行長度。每組結果佔一行。

樣例輸入

2

asdf

adfsd

123abc

abc123abc

樣例輸出

3  6

#include#include#define n 1010				//巨集定義乙個n 

using namespace std;

int dp[n][n]; //定義二維陣列 dp[n][n]

char s1[n],s2[n]; //兩個字串

int max(int a,int b) //定義乙個返回兩數最大值的函式

int main()

}cout<

這個題利用了乙個二維陣列進行比較,其兩個迴圈會組成下面乙個表

例如輸入:

asdf

adfsd

a

dfsd

0000

00a0

1111

1s01

1122

d012

222f

0123

33利用表的特性,進行蔓延推導,每乙個小格都是乙個備忘錄,都在記錄著之前共有幾一樣的值,然後如果有相同,就會加1,而且這個加1,會通過蔓延而是全部資料都會加1,從而到了最後乙個數,就是所有順序公共子串行的個數。

NYOJ36 最長公共子串行

題目分析 假設兩個字串分別標記為str1和str2。建立乙個二維的表dp,dp i j 表示str1的前i個字元和str2的前j個字元的最長公共子串行的個數,遍歷str1和str2的所有元素,如果str1 i str2 j 則dp i j dp i 1 j 1 1 否則dp i j max dp i...

nyoj 36 最長公共子串行

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 咱們就不拐彎抹角了,如題,需要你做的就是寫乙個程式,得出最長公共子串行。tip 最長公共子串行也稱作最長公共子串 不要求連續 英文縮寫為lcs longest common subsequence 其定義是,乙個序列 s 如果分...

NYOJ 36 最長公共子串行

時間限制 3000 ms 記憶體限制 65535 kb難度 3 描述 咱們就不拐彎抹角了,如題,需要你做的就是寫乙個程式,得出最長公共子串行。tip 最長公共子串行也稱作最長公共子串 不要求連續 英文縮寫為lcs longest common subsequence 其定義是,乙個序列 s 如果分別...