最長公共子序列問題—動態規劃sdut

ACG00發表於2020-12-07

最長公共子序列問題

Description
給定兩個序列 X={x1,x2,…,xm} 和 Y={y1,y2,…,yn},找出X和Y的最長公共子序列。

Input
輸入資料有多組,每組有兩行 ,每行為一個長度不超過500的字串(輸入全是大寫英文字母(A,Z)),表示序列X和Y。

Output
每組輸出一行,表示所求得的最長公共子序列的長度,若不存在公共子序列,則輸出0。

Sample
Input

ABCBDAB
BDCABA
Output
4

程式碼實現及思想大概.(本人學的也不是很好,也處於一邊學習的路上,如有不合適或者理解錯誤的地方,還請斧正)由於時間原因,思想我會在後期更新。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char x[555],y[555];
    int q[555][555];
    int i,j,lx,ly;
    while(cin>>x>>y)
    {
        lx=strlen(x);
        ly=strlen(y);
        memset(q,0,sizeof(q));
        for (i=1;i<=lx;i++)
        {
            for (j=1;j<=ly;j++)
            {
                if (x[i-1]==y[j-1]) q[i][j]=q[i-1][j-1]+1;
                else q[i][j]=max(q[i-1][j],q[i][j-1]);
            }
        }
        cout<<q[lx][ly]<<endl;
    }
    return 0;
}

相關文章