https://www.acmicpc.net/problem/9251
풀이
1. arr[i]와 arr[j]가 일치할 경우
dp[i][j] = dp[i - 1][j - 1] + 1;
2. 일치하지 않을경우
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
그림 출처 : https://m.blog.naver.com/PostView.nhn blogId=tjdwns0920&logNo=221129635977&targetKeyword=&targetRecommendationCode=1&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
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 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #define max(a,b) a>b ? a:b int main() { char arr[1001]; char arr1[1001]; int dp[1001][1001] = { 0, }; scanf("%s %s", &arr, &arr1); int a = strlen(arr); int b = strlen(arr1); for (int i = 1; i <= a; i++) { for (int j = 1; j <= b; j++) { if (arr[i - 1] == arr1[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } } printf("%d", dp[a][b]); return 0; } | cs |
'알고리즘' 카테고리의 다른 글
(11055)(DP) 백준 가장 큰 증가 부분 수열 (0) | 2018.08.07 |
---|---|
(2133)(DP) 백준 타일 채우기 (2) | 2018.08.06 |
(1699)(DP) 백준 제곱수의 합 (0) | 2018.08.04 |
(11048)(DP) 백준 이동하기 (0) | 2018.08.01 |
(2294)(DP) 백준 동전2 (0) | 2018.08.01 |