[Gold V]
https://www.acmicpc.net/problem/13703
풀이
재귀와 DP를 이용해 쉽게 풀이할 수 있는 문제.
loc(location, 물벼룩의 위치)가 0이 되면, 2에 남은 시간만큼의 제곱을 해 준다. (그만큼의 확률을 가져가므로) (line 9)
memoization을 이용하지 않고 재귀로만 풀이하면 시간초과가 난다.
AC.
k, n = map(int, input().split())
dp = [[-1]*200 for _ in range(200)]
def swim(sec: int, loc: int):
if dp[sec][loc] != -1:
return dp[sec][loc]
if loc == 0:
dp[sec][loc] = 2**sec
return 2**sec
if sec == 0:
return 0
dp[sec][loc] = swim(sec-1, loc-1) + swim(sec-1, loc+1)
return dp[sec][loc]
swim(n, k)
print(2**n - dp[n][k])