BOJ::1958 LCS3
https://www.acmicpc.net/problem/1958
세문자열의 LCS를 구하는 문제.
두문자열과 거의 비슷하지만, 3차원이므로 max비교를 몇가지 경우만 더 해주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <string> #include <iostream> using namespace std; string s1,s2,s3; int d[101][101][101]; int max3(int a, int b, int c) { if (a > b) { return (a > c) ? a : c; } else { return (b > c) ? b : c; } } int max(int a, int b) { return (a > b) ? a : b; } int main() { cin >> s1 >> s2 >> s3; int n1 = s1.length(); int n2 = s2.length(); int n3 = s3.length(); for (int i = 1; i <= n1; i++) { for (int j = 1; j <= n2; j++) { for (int k = 1; k <= n3; k++) { if (s1.at(i-1) == s2.at(j-1) && s2.at(j-1) == s3.at(k-1)) { d[i][j][k] = d[i - 1][j - 1][k - 1] + 1; } else { d[i][j][k] = max( max3(d[i - 1][j - 1][k], d[i - 1][j][k - 1], d[i][j - 1][k - 1]), max3(d[i - 1][j][k], d[i][j - 1][k], d[i][j][k - 1]) ); } } } } cout << d[n1][n2][n3] << endl; } | cs |
'BOJ::문제풀이' 카테고리의 다른 글
1941 소문난칠공주 (0) | 2018.01.26 |
---|---|
14888 연산자 끼워넣기 (0) | 2018.01.26 |
9252 LCS 2 (1) | 2018.01.14 |
9251 LCS (0) | 2018.01.14 |
14889 스타트와 링크 (0) | 2018.01.14 |