Programação dinâmica - Decisão de mudança de moeda
Estou revendo algumas anotações antigas do meu curso de algoritmos e os problemas de programação dinâmica estão me parecendo um pouco complicados. Eu tenho um problema em que temos um suprimento ilimitado de moedas, com algumas denominações x1, x2, ... xn e queremos alterar por algum valor X. Estamos tentando criar um programa dinâmico para decidir se a alteração para X pode ser feito ou não (não minimizando o número de moedas ou retornando quais moedas, apenas verdadeiras ou falsas).
Eu pensei um pouco sobre esse problema e posso ver um método recursivo de fazer isso, onde é algo como ...
MakeChange(X, x[1..n this is the coins])
for (int i = 1; i < n; i++)
{
if ( (X - x[i] ==0) || MakeChange(X - x[i]) )
return true;
}
return false;
Convertendo isso um programa dinâmico não está vindo tão facilmente para mim. Como posso abordar isso?