동적 계획법은 복잡한 문제를 여러개의 간단한 문제로 분리해 부분문제를 해결함으로 복잡한 문제의 답을 구하는 방법을 의미한다. 핵심 이론은 ① 큰 문제를 작은 문제로 나눈다. ② 작은 문제들이 반복되고, 작은문제들의 결과값은 항상 같아야한다. ③ 모든 작은문제는 한번만 계산돼 DP 테이블에 저장한 뒤 재사용할때는 이 테이블을 이용한다 동적계획법에는 두가지 방식 탑다운 방식과 , 바텀업 방식으로 나눠진다. 탑다운 문제를 파악하고 점차 내려오는 방식으로, 주로 재귀함수 형태로 코드를 구현한다. 이 방식은 코드의 가독성이 좋고, 이해하기 편한 장점이 있다. int[] memo; int Fibo(int n) { if (memo[n] != -1) return memo[n]; if (n