알고리즘/문제 풀이
백준 9251 - LCS (C++)
qqlzzb
2022. 9. 13. 23:43
문제 : https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
풀이
LCS는 최장 공통 부분 수열로 dp로 구현할 수 있다.
관련 포스팅은 --> https://qqs-diary.tistory.com/132
코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int dp[1001][1001];
char s1[1001],s2[1001];
int main()
{
scanf("%s %s",s1+1,s2+1);
int i=1,j=1;
for(i=1; s1[i]; i++)
{
for(j=1; s2[j]; j++)
{
dp[i][j]=max({dp[i][j-1],dp[i-1][j],dp[i-1][j-1]+(s1[i]==s2[j])});
}
}
cout<<dp[i-1][j-1];
}