[9184] 신나는 함수 실행
BOJ/DP2018. 2. 16. 21:47
- 메모이제이션만 하면 된다.
< 소스코드 >
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 <= 0) return 1; if(a > 20 || b > 20 || c > 20) return w(20, 20, 20); 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 == -1) break; 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 |