본문 바로가기
알고리즘/DP

돌다리건너기 더블릿 (2602 백준)

by tryotto 2019. 2. 10.
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
#include <stdio.h>
#include <cstring>
 
using namespace std;
 
int dp[1000][3][1000= { 0 };
char a[1000= { 0 };
char b[3][1000= { 0 };
 
int main() {
    scanf("%s %s %s"&a,&b[1],&b[2]);
    getchar();
    
    int sn = strlen(a);
    int bn = strlen(b[1]);
 
    for (int k = 0; k < bn; k++) {
        if (a[0== b[1][k])
            dp[0][1][k] = 1;
        if (a[0== b[2][k])
            dp[0][2][k] = 1;
    }
    
    for (int i = 1; i < sn; i++) {
        for (int k = 0; k < bn; k++) {
            if (a[i] == b[1][k]) {
                for (int h = 0; h < k; h++) {
                    dp[i][1][k] += dp[i-1][2][h];
                }                
            }
            if (a[i] == b[2][k]) {
                for (int h = 0; h < k; h++) {
                    dp[i][2][k] += dp[i-1][1][h];
                }                
            }            
        }
    }
 
    int idx = 0;
    for (int i = 0; i < bn; i++) {
        for (int k = 1; k <= 2; k++) {
            if(dp[sn-1][k][i]!=0)
                idx += dp[sn - 1][k][i];
        }
    }
    printf("%d", idx);
}
cs


'알고리즘 > DP' 카테고리의 다른 글

구간차의 합 문서 더블릿  (0) 2019.02.16
9084 동전  (0) 2019.02.11
부분합 더블릿  (0) 2019.02.09
9251 LCS  (0) 2019.02.09
1149 RGB거리  (0) 2019.02.09