λ¬Έμ
λ°±μ€ μ¨λΌμΈ μ μ§ - 4811λ²
νμ΄ κ³Όμ
μμ½μ νλ μ 체λ₯Ό λ¨Ήκ±°λ λ°κ°λ₯Ό λ¨Ήμ΄μ λ§λ€ μ μλ λͺ¨λ λ¬Έμμ΄μ κ°μλ₯Ό μ°Ύλ λ¬Έμ μ λλ€.
μμ νμμΌλ‘ μ κ·Όνλ©΄ κ²½μ°μ μκ° λ무 λ§κΈ° λλ¬Έμ μ€λ³΅λ μ°μ°μ λ§μ΄ μννκ² λ©λλ€.
λμ λμ κ³νλ²
μ νμ©ν΄μ λͺ¨λ κ²½μ°μ μλ₯Ό ꡬνλ©΄ μ€λ³΅λ μ°μ°μ λ§μ΄ μ€μΌ μ μμ΅λλ€.
dp[i][w][h] = μμ½ νκ°κ° Wκ°, λ°κ°κ° hκ° μμ λ i λ λΆν° μμν΄μ λ§λ€ μ μλ λͺ¨λ λ¬Έμμ΄μ κ°μ
λΌκ³ μ μνλ€λ©΄
λ€μκ³Ό κ°μ μ νμμ μ»μ μ μμ΅λλ€.
dp[i][w][h] = dp[i + 1][w][h + 1] + dp[i + 1][w + 1][h]
λ¨ μ μμ κ²½μ° `h < w` μ¬μΌ νλ©° νμμ κ²½μ°λ `w < N(μ 체 μμ½ μ)` μ΄μ΄μΌ ν©λλ€.
μ½λ
import sys
N = 0
memo = []
def eat_pill(day, w, h):
if day == 2 * N - 1:
return 1
if memo[day][w][h] != -1:
return memo[day][w][h]
memo[day][w][h] = 0
# μμ½ λ°κ° λ¨ΉκΈ°
if h < w:
memo[day][w][h] += eat_pill(day + 1, w, h + 1)
# μμ½ νκ° λ¨ΉκΈ°
if w < N:
memo[day][w][h] += eat_pill(day + 1, w + 1, h)
return memo[day][w][h]
def solution():
global memo
memo = [[[-1] * (N + 1) for _ in range(N + 1)] for _ in range(2 * N)]
return eat_pill(0, 1, 0)
if __name__ == '__main__':
while True:
N = int(sys.stdin.readline())
if N == 0:
break
answer = solution()
print(answer)
λ°μν
'π algorithm > boj' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
BOJ 2331 - λ°λ³΅μμ΄ (0) | 2021.06.07 |
---|---|
BOJ 4889 - μμ μ μΈ λ¬Έμμ΄ (0) | 2021.06.07 |
BOJ 5980 - Corn Maze (0) | 2021.06.07 |
BOJ 1240 - λ Έλμ¬μ΄μ 거리 (0) | 2021.06.07 |
BOJ 11265 - λλμ§ μλ νν° (0) | 2021.06.04 |
π¬ λκΈ