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?

questionAnswers(7)

yourAnswerToTheQuestion