開啟章節選單

10405 Longest Common Subsequence

解題思路

使用 LCS 算法

程式碼

#include <iostream>
using namespace std;

int main() {
    string a, b;
    while (getline(cin, a) && getline(cin, b)) {
        int dp[a.length() + 1][b.length() + 1];
        for (int i = 0; i <= a.length(); i++) dp[i][0] = 0;
        for (int i = 0; i <= b.length(); i++) dp[0][i] = 0;
        for (int i = 1; i <= a.length(); i++)
            for (int j = 1; j <= b.length(); j++) {
                if (a[i - 1] != b[j - 1])
                    dp[i][j] =
                        max(max(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1]);
                else
                    dp[i][j] = dp[i - 1][j - 1] + 1;
            }
        cout << dp[a.length()][b.length()] << endl;
    }
}