https://www.acmicpc.net/problem/9251

 

9251번: LCS

LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.

www.acmicpc.net

더보기
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    string a, b;
    cin >> a >> b;
    int n = a.length();
    int m = b.length();
    vector<vector<int> > dp;    
    dp.resize(n + 1);    
    dp[0].resize(m + 1);
    for (int i = 1; i <= n; i++) {
        dp[i].resize(m + 1);
        for (int j = 1; j <= m; j++) {
            if (a[i-1] == b[j-1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;
            }
            else {
                dp[i][j] = (dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1]);
            }
        }
    }
    /*for (int i = 1; i <= n;i++) {
        for (int j = 1; j <= m;j++) {
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }*/
    cout << dp[n][m];
    return 0;
}