How We Coding

[9251] LCS

BOJ/DP2018. 4. 21. 02:14

[9251] LSC : http://boj.kr/9251


### DP ###


lcs(si, ti) : 문자열 s의 si번째 문자까지, t의 ti번째의 문자까지의 가장 긴 증가하는 부분 문자열 (최장 공통 부분 수열)


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
#include <stdio.h>
#include <string.h>
 
char s[1001], t[1001];
int d[1001][1001];
 
int max(int a, int b)
{
    return a > b ? a : b;
}
 
int lcs(int si, int ti)
{
    int ret = 0
 
    if(si < 0 || ti < 0return 0;
    if(d[si][ti] != -1return d[si][ti];
 
    if(s[si] == t[ti]) {
        ret = lcs(si-1, ti-1)+1;
    }
    else {
        ret = max(lcs(si-1, ti), lcs(si, ti-1));
    }   
    return d[si][ti] = ret;
}
 
int main()
{
    int sLen=0, tLen=0;
    scanf("%s%s", s, t);
 
    while(s[sLen]) sLen++;
    while(t[tLen]) tLen++;
 
    memset(d, -1sizeof(d));
    printf("%d\n", lcs(sLen-1, tLen-1));
    return 0
}
cs


'BOJ > DP' 카테고리의 다른 글

[2602] 돌다리 건너기  (0) 2018.05.17
[9252] LCS2  (0) 2018.04.22
[14002] 가장 긴 증가하는 부분 수열 4  (0) 2018.04.18
[10942] 팰린드롬?  (0) 2018.02.22
[1890] 점프  (0) 2018.02.22