μ λ ₯
μ λ ₯μ μΈ μ μ a, b, cλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, ν μ€μ νλμ© μ£Όμ΄μ§λ€. μ λ ₯μ λ§μ§λ§μ -1 -1 -1λ‘ λνλ΄λ©°, μΈ μ μκ° λͺ¨λ -1μΈ κ²½μ°λ μ λ ₯μ λ§μ§λ§μ μ μΈνλ©΄ μλ€.
μΆλ ₯
μ λ ₯μΌλ‘ μ£Όμ΄μ§ κ°κ°μ a, b, cμ λν΄μ, w(a, b, c)λ₯Ό μΆλ ₯νλ€.
ν΄κ²° λ°©λ²
dpλ₯Ό νμ©νλ€.
ν΄κ²° κ³Όμ
[0][0][0] ~ [20][20][20]μ 3μ°¨μ λ°°μ΄μ μμ±νκ³ κ° μ‘°κ±΄λ³λ‘ λλλ€.
νΉμ λ²μ μ΄λ΄μ λ€μ΄μ€λ©΄ dpλ₯Ό κ³μ°νλ€.
νΉμ μμΉμ dpμ κ°μ΄ 0μ΄ μλ κ²½μ° μ΄λ―Έ κ³μ°λμ΄ μλ dpμ΄λ―λ‘ λ³λμ κ³μ° κ³Όμ μμ΄ λ°λ‘ μΆλ ₯νλ€.
μ΅μ’ μ½λλ
def w(dp, a, b, c):
if a <= 0 or b <= 0 or c <= 0:
return 1
elif a > 20 or b > 20 or c > 20:
return w(dp, 20, 20, 20)
if dp[a][b][c] != 0:
return dp[a][b][c]
if a < b and b < c:
dp[a][b][c] = w(dp, a, b, c-1) + w(dp, a, b-1, c-1) - w(dp, a, b-1, c)
else:
dp[a][b][c] = w(dp, a-1, b, c) + w(dp, a-1, b-1, c) + w(dp, a-1, b, c-1) - w(dp, a-1, b-1, c-1)
return dp[a][b][c]
def main():
a, b, c = map(int, input().split())
dp = [[[0 for _ in range(21)] for _ in range(21)] for _ in range(21)]
while 1:
if a == -1 and b == -1 and c == -1:
break
print("w(%d, %d, %d) = %d" %(a, b, c, w(dp, a, b, c)))
a, b, c = map(int, input().split())
if __name__ == "__main__":
main()
'βοΈ μ½ν μ€λΉ > Dynamic Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λμ κ³νλ² 1] [C++] 1932λ². μ μ μΌκ°ν (0) | 2021.01.13 |
---|---|
[λμ κ³νλ² 1] [C++] 1149λ². RGB 거리 (0) | 2021.01.13 |
[λμ κ³νλ² 1] [C++] 9461λ². νλλ° μμ΄ (0) | 2021.01.13 |
[λμ κ³νλ² 1] [Python] 1904λ². 01νμΌ (0) | 2021.01.12 |
[λμ κ³νλ² 1] [Python] 1003λ². νΌλ³΄λμΉ ν¨μ (0) | 2021.01.12 |