문제
https://www.acmicpc.net/problem/9184
9184번: 신나는 함수 실행
입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다.
www.acmicpc.net
코드
import sys
input=sys.stdin.readline
#+51
def recur(a,b,c):
if dp[a][b][c]!=-1:
return dp[a][b][c]
if a<=51 or b<=51 or c<=51:
return 1
elif a>71 or b>71 or c>71:
dp[a][b][c]=recur(71,71,71)
elif a<b and b<c:
dp[a][b][c]=recur(a,b,c-1)+recur(a,b-1,c-1)-recur(a,b-1,c)
else:
dp[a][b][c]=recur(a - 1, b, c) + recur(a - 1, b - 1, c) + recur(a - 1, b, c - 1) - recur(a - 1, b - 1, c - 1)
return dp[a][b][c]
dp=[[[-1]*103 for _ in range(103)] for _ in range(103)]
while(1):
a,b,c=map(int, input().split())
if (a==-1 and b==-1 and c==-1):
break
print(f"w({a}, {b}, {c}) = ", end="")
print(recur(a+51,b+51,c+51))
'문제풀이 > DP' 카테고리의 다른 글
[파이썬] [DP] 백준 27210 신을 모시는 사당 (0) | 2023.01.14 |
---|---|
[파이썬] [DP] 백준 11049 행렬 곱셈 순서 (0) | 2022.12.21 |
[파이썬] [DP] 백준 2293 동전 1 (0) | 2022.04.07 |
[파이썬] [DP] 백준 9251 LCS (0) | 2022.03.26 |
[파이썬] [DP] 백준 11066 파일 합치기 (0) | 2022.03.14 |