Ideia geral:
A técnica clássica de programação dinâmica preenche uma tabela com todas as soluções para subproblemas menores, mas as calcula apenas UMA vez. Um ponto não satisfatório desse modelo, é que por vezes muitas dessas soluções menores não são necessárias para produzir a solução final.
O objetivo então, é solucionar apenas subproblemas que serão necessários e fazê-lo apenas uma vez.
Esse método soluciona o problema de forma top-down mas, adicionalmente, mantém uma tabela do tipo que seria usada por uma técnica bottom-up de programação dinâmica. Inicialmente, a tabela é preenchida com NULL para indicar que aquela célula ainda não foi calculada. Após isso, sempre que um novo valor precisar ser calculado, o algoritmo checa na tabela se o valor já não consta nela. Caso a célula seja NULL, o valor é computado e guardado nela.