**Dynamic programming(DP, 동적 계획법)**은 **겹치는 부분 문제(overlapping subproblems)**와 **최적 부분 구조(optimal substructure)**를 가진 문제를, 각 부분 문제를 한 번 계산하고 결과를 재사용하여 해결합니다. 두 가지 방식은 memoization(하향식)과 tabulation(상향식)입니다.
개념
단순한 재귀는 같은 부분 문제를 지수적으로 재계산합니다. DP는 그것을 캐시하여 지수적 작업을 다항 시간으로 축소합니다.
Memoization (하향식)
python
functools lru_cache
():
n < :
n
fib(n - ) + fib(n - )
