How We Coding

[2602] 돌다리 건너기 : http://boj.kr/2602


- 난 3차원으로 풀었는데, 다른 사람들은 2차원으로 풀었다. 


d[bidx][ad][sidx] : 상태가 ad(0은 천사차례, 1은 악마차례) 일때, 

       bidx번째 돌다리에서, sidx 번째 문자부터 시작하는 문자열에 적힌 순서대로 다리를 건널 수 있는 방법의 수


<소스코드>

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
#include <stdio.h>
 
char str[21];
char ang[101], dev[101];
int d[101][2][21];
 
int bridge(int bidx, int ad, int sidx)
{
    int *ret = &d[bidx][ad][sidx];
    if(!str[sidx]) return 1;
    if(ad == 0 && !ang[bidx]) return 0;
    if(ad == 1 && !dev[bidx]) return 0;
    
    if(*ret) return *ret;
 
    if(ad == 0) {
        if(ang[bidx] == str[sidx])
            *ret = bridge(bidx+1!ad, sidx+1);
        *ret += bridge(bidx+1, ad, sidx);
    }
    else {
        if(dev[bidx] == str[sidx])
            *ret = bridge(bidx+1!ad, sidx+1);
        *ret += bridge(bidx+1, ad, sidx);
    }
    return *ret;
}
 
int main()
{   
    scanf("%s%s%s", str, ang, dev);
    printf("%d\n", bridge(000)+bridge(010));
    return 0;
}
cs

>> 천사다리를 먼저 택한 경우 + 악마다리를 먼저 택한 경우

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

[11985] 오렌지 출하  (0) 2018.06.21
[9177] 단어 섞기  (0) 2018.05.22
[9252] LCS2  (0) 2018.04.22
[9251] LCS  (0) 2018.04.21
[14002] 가장 긴 증가하는 부분 수열 4  (0) 2018.04.18