Динамическое программирование - решение об изменении монет
Я рассматриваю некоторые старые заметки из моего курса по алгоритмам, и проблемы с динамическим программированием кажутся мне немного сложными. У меня проблема в том, что у нас неограниченный запас монет с некоторыми номиналами x1, x2, ... xn, и мы хотим внести изменения для некоторого значения X. Мы пытаемся разработать динамическую программу, чтобы решить, может ли изменение для X быть сделано или нет (не минимизируя количество монет, или возвращая, какие монеты, только правда или ложь).
Я немного подумал об этой проблеме, и я вижу рекурсивный способ сделать это, когда это что-то вроде ...
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;
Преобразование этой динамической программы не так легко для меня. Как я могу подойти к этому?