白準9184ハッピー関数の実行
https://www.acmicpc.net/problem/9184
これはdpの問題ですが、3 D配列をしたことがないので、どうすればいいか検索しました.
https://jainn.tistory.com/82
でも2次元配列を作るように作って次元数を増やしてもいいです
これはdpの問題ですが、3 D配列をしたことがないので、どうすればいいか検索しました.
https://jainn.tistory.com/82
でも2次元配列を作るように作って次元数を増やしてもいいです
import sys
def w(a, b, c):
if a <= 0 or b <= 0 or c <= 0:
return 1
if a > 20 or b > 20 or c > 20:
return w(20, 20, 20)
if dp[a][b][c]: # dp값이 이미 있으면 바로 리턴, 없으면 구하고 리턴
return dp[a][b][c]
if a < b and b < c:
dp[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
return dp[a][b][c]
dp[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)
return dp[a][b][c]
dp = [[[0] * 21 for _ in range(21)] for _ in range(21)]
while True:
a, b, c = map(int, sys.stdin.readline().strip().split())
if a == b == c == -1:
break
print(f'w({a}, {b}, {c}) = {w(a, b, c)}')
これは難しくない問題であるが,見知らぬ3次元配列とifdp[a][b][c]:return dp[a][b][c]とは思わなかった.dpは計算時間を減らすために値を格納するので、再計算は必要ありません.ずっと覚えてねReference
この問題について(白準9184ハッピー関数の実行), 我々は、より多くの情報をここで見つけました https://velog.io/@chss3339/백준-9184-신나는-함수-실행テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol