最長公共子串行問題 動態規劃 C

2021-09-27 16:50:13 字數 923 閱讀 1731

題目描述:若給定序列x=,則另一串行z=,是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j=1,2,…,k有:zj=xij。例如,序列z=是序列x=的子串行,相應的遞增下標序列為。

給定2個序列x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。

給定2個序列x=和y=,找出x和y的最長公共子串行。

**如下:

#include #include#include #define m 7

#define n 6

int c[m+1][n+1];

char b[m+1][n+1];

void lcslength(char *x, char *y)

else if (c[i - 1][j] >= c[i][j - 1])

else

}}void lcs(int i, int j, char *x)

else if (b[i][j] == 2)

lcs(i - 1, j, x);

else

lcs(i, j - 1, x);

}int main()

printf("請輸入序列y:");

for (int i = 1; i <= n; i++)

lcslength(x, y);

printf("lcs長度表c:\n");

for (i = 1; i <= m; i++)

printf("路徑表b:\n");

for (i = 1; i <= m; i++)

printf("\nlcs是:\n");

printf("\n");

lcs(m, n,x);

system("pause");

return 0;

}

學習中,歡迎交流,指導

動態規劃 最長公共子串行問題

最長公共子串行問題 longest common subsequence problem 簡稱lcs問題。題目為給定兩個序列x y求它們的lcs 最長公共子串行 這裡的子串行z的定義為 z中的元素既在x中也在y中,並且他們在x y中滿足嚴格的下標為乙個增序列 假設下標從左到右依次增大 另外,不要求z...

最長公共子串行問題 動態規劃

給定兩個字串s1s2.sn和t1t2.tn。求出這兩個字串最長的公共子串行 輸入 abcicba abdkscab 輸出 abca 定義dp i j 為s1 si和t1 tj對應的lcs的長度 s1 si 1和t1 tj 1對應的公共子列有三種情況 當si 1 tj 1時,在s1 si和t1 tj的...

最長公共子串行問題(動態規劃)

time limit 1000ms memory limit 65536kb problem description 給定兩個序列x input 輸入資料有多組,每組有兩行 每行為乙個長度不超過500的字串 輸入全是大寫英文本母 a,z 表示序列x和y。output 每組輸出一行,表示所求得的最長公...