https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
0. 알고리즘 분류
다이나믹 프로그래밍
1. 문제
2. 풀이
LIS(가장 긴 증가하는 부분 수열) 문제와 비슷한 유형인줄 알고 시도했다가 제대로 대가리 깨졌다. 문제의 개념은 비슷할지마도 사용하는 알고리즘은 완전히 다르다. 몰라서 역시 구글링했다. http://melonicedlatte.com/algorithm/2018/03/15/181550.html
[백준] 9251번 C/C++ 풀이 _ LCS - Easy is Perfect
출처 : https://www.acmicpc.net/problem/9251 시간 제한메모리 제한제출정답맞은 사람정답 비율1 초128 MB76453240240041.746% 문제LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때,
melonicedlatte.com
생전 처음보는 문제 유형이었다...
3. 코드
#include<cstdio>
#include<algorithm>
using namespace std;
char s1[1002], s2[1002];
int dp[1001][1001], i, j;
int main() {
scanf("%s %s", s1 + 1, s2 + 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])});
printf("%d", dp[i - 1][j - 1]);
return 0;
}
'IT > BOJ 문제정리' 카테고리의 다른 글
백준 11659번: 구간 합 구하기 4 (1) | 2021.08.13 |
---|---|
백준 1976번: 여행 가자 (0) | 2021.08.05 |
백준 12015번: 가장 긴 증가하는 부분 수열 2 (0) | 2021.08.03 |
백준 1300번: K번째 수 (0) | 2021.08.02 |
백준 2565번: 전깃줄 (0) | 2021.07.28 |