[DP] 메모이제이션 구현 레시피
2021. 7. 6. 01:14ㆍ알고리즘 관련/[레시피]DP
1. 기저 사례를 가장 먼저 처리. 입력 범위 벗어난 경우(nx < 0 && nx > N 등) 포함
2. cache[]를 전부 -1로 초기화.
3. ret는 cache[a][b]의 참조 변수. 즉 ret의 값이 바뀌면, cache[a][b]의 값도 바뀜.
4. memset()을 이용해 cache를 초기화. 하지만, 굉장히 제한적인 경우에만 쓸것!
레시피의 예.
#include <memory.h> // memset을 쓰기 위해 include(백준 등에서 쓰기 위함).
int cache[2500][2500]; // 2. 전부 -1로 초기화 해둔다.
int dpFunction(int a, int b)
{
if (...) return ...; // 1. 기저 사례를 가장 먼저 처리.
int& ret = cache[a][b]; // 3. ret는 cache[a][b]의 참조 변수.
if (ret != -1) return ret; // 답을 구한 적 있으면 바로 리턴.
...
return ret;
}
int main(void)
{
memset(cache, -1, sizeof(cache)); // 4. memset으로 cache를 -1로 초기화.
}
'알고리즘 관련 > [레시피]DP' 카테고리의 다른 글
[DP] 최적화 문제 실제 답 계산 레시피 (0) | 2021.07.14 |
---|---|
[DP] 최적화 DP 레시피 (0) | 2021.07.10 |