![](https://tistory1.daumcdn.net/tistory_admin/blogs/image/category/new_ico_5.gif)
재귀로 작성한 다이나믹 프로그래밍에서 한 번 계산한 결과를 기록해 두고 같은 상태에 재방문했을 때 재계산을 하지 않고 기록해 둔 값을 바로 반환하는 메모이제이션은 필수적인 기법 중 하나입니다. 여기에서 중요한 것은 코드가 이미 계산했던 결과인지 여부를 판단할 수 있어야 한다는 것입니다. 이 말만 들으면 별로 특별할 것이 없어 보이는데, 실제로 재귀 DP에서 이 부분은 매우 자주 실수하고 시간 초과를 받게 되는 원인입니다. 예를 들어 11048 - 이동하기 문제에서 다음과 같은 코드를 작성할 수 있습니다.#include using namespace std;int n, m;int a[1005][1005];int dp[1005][1005];int f(int r, int c){ int &ret = dp[r..