How We Coding

http://boj.kr/9184


- 메모이제이션만 하면 된다.


< 소스코드 >


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
#include <stdio.h>
 
int d[21][21][21];
 
int w(int a, int b, int c)
{
    if(a <= 0 || b <= 0 || c <= 0return 1;
 
    if(a > 20 || b > 20 || c > 20
        return w(202020);
    
    if(d[a][b][c]) return d[a][b][c];
    
    if(a < b && b < c)
        return d[a][b][c] = w(a, b, c-1+ w(a, b-1, c-1- w(a, b-1, c);
    
    return d[a][b][c] = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1- w(a-1, b-1, c-1);
}
 
int main()
{
    while(1) {
        int a, b, c;
        scanf("%d%d%d"&a, &b, &c);
        if(a == -1 && b == -1 && c == -1break;
        
        printf("w(%d, %d, %d) = %d\n", a, b, c, w(a, b, c));
    }
    return 0;
}
 
cs


>> 12 라인을 9번 라인보다 먼저 써서 런타임에러가 발생했었다...

>> 배열의 각 차원의 크기는 21인데, a, b, c 중 20보다 큰 값이 들어오면 저 코드를 먼저 실행하게 

     되어 런타임 에러가 발생하는 듯 하다.

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

[2216] 문자열과 점수  (0) 2018.02.21
[11048] 이동하기  (0) 2018.02.18
[2302] 극장 좌석  (0) 2018.02.05
[1937] 욕심쟁이 판다  (0) 2018.02.01
[1309] 동물원  (0) 2018.02.01