CS/μκ³ λ¦¬μ¦
λ°±μ€ 9184 νμ΄μ¬ - μ λλ ν¨μ μ€ν - λμ κ³νλ²
π»β
2021. 10. 7. 15:00
λ°±μ€ 9184 νμ΄μ¬
https://www.acmicpc.net/problem/9184
λ¬Έμ μμ μμ κ°μ 쑰건μ μ¬κ·ν¨μκ° μ£Όμ΄μ§λλ°... ν΄λΉ μ¬κ·λ₯Ό κ·Έλλ‘ μ€ννλ©΄ κ°μ ꡬνλλ° λ무 μ€λ κ±Έλ¦°λ€κ³ νλ€. λμ κ³νλ²μ κΈ°μ? λμ κ³νλ²μ΄λ μκ³ λ¦¬μ¦μ΄ μ겨λκ² λ λ°°κ²½μ΄... λΆν μ 볡μμ μμ λ€μ μͺΌκ°μ ν λ μ€λ³΅λμ νλ μμ μ΄ λ§μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ§λ€μ΄μ‘λ€κ³ ν©λλ€.
κ·Έλμ μ¬κ·ν¨μμ κ°μ΄ λμ€λ₯Ό νκ³ λ΄λ €κ°μ κ°μ ꡬν λ... κ³μ°ν κ°μ μ€κ°μ νμΈνλ λΆκΈ°λ₯Ό μ£Όλ©΄, λΆνμν κ³μ°μ μ€μ΄κ³ μ΄μ μ κ³μ°ν κ°μ μ¬μ©ν μ μμ΅λλ€.
Python νμ΄
import sys
read = sys.stdin.readline
cache = {}
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)
key = '{} {} {}'.format(a, b, c)
### ν΅μ¬μ½λ ###
if key in cache:
return cache[key]
res = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
cache[key] = res
################
return res
while True:
a,b,c = map(int, read().split())
if a == -1 and b == -1 and c == -1:
break
print('w({}, {}, {}) = {}'.format(a, b, c, w(a, b, c)))
- μ£Όμ΄μ§ w ν¨μμμ μ€κ°μ κ³μ°λ κ°μ μ μ₯νκ³ μ¬μ¬μ©ν μ μλ λΆκΈ°λ₯Ό μ€λ€.(ν΅μ¬ μ½λ)
- κ°μ μ μ₯νκΈ° μν cacheλ₯Ό λμ
λ리 ννλ‘ μ μΈνκ³ a,b,cλ₯Ό μ΄μ©ν΄μ string ννλ‘ λ§λ€μ΄ keyκ°μΌλ‘ μ¬μ©νλ€.
- λ€λ₯Έ νμ΄λ‘λ λμ λλ¦¬κ° μλλΌ λ©λͺ¨μ΄μ μ΄μ μ 3μ°¨μ λ°°μ΄μ μ΄μ©ν΄μ νΈλ λ°©λ²λ μμ΅λλ€.