2013-05-08 3 views
1

Этот вопрос специально адресован проблеме изменения монет. Я знаю алгоритм, чтобы найти оптимальное количество монет, используемых для поиска изменений для любой суммы, и я также понимаю это, но я не понимаю, как я могу «отметить», если вы пройдете путь к поиску такого решения. Я попытался использовать указатели родителей, которые, я уверен, это способ сделать это, но я просто не знаю, как бы это реализовать. Вот пример. Пример: данные монеты номиналов: 1, 10, 25 Изменение: 30 Оптимальное решение требует: 3 монеты Монеты, используемые: 10, 10, 10Какова хорошая методика вывода решения с использованием динамического программирования?

Я на самом деле не так хорош в решении динамических задач программирования.

+0

Предположим, вы знаете, оптимальное решение с 1 по 29. Как вы могли бы использовать его, чтобы найти решение для 30? – ElKamina

+0

Извините, я забыл сообщить вам, что мое текущее решение проблемы хранится только в массиве, я не делаю таблицу. Поэтому у меня есть решение от 1 -29, но от количества используемых монет, а не от монет. Простите, если это должно быть интуитивно, но это действительно не для меня. Я предполагаю, что мой вопрос: если бы я должен был реализовать таблицу 2d с суммами от 0 до n в виде строк и монетных достоинств от 1 до k в качестве столбцов, каковы были бы значения каждой ячейки и как я мог бы их вычислить? – Sektrax

+0

Вы можете решить эту проблему более эффективно. Держите указатель на предыдущее оптимальное решение, из которого выводится текущее оптимальное решение. Например. Для 10 есть ссылка на ноль. Для 20 ссылок на 10 и для 30 ссылок на 20. Теперь все, что вам нужно сделать, это вернуться. 30 - это 20, так что это 30-20 = 10, 20 - это 10-> 20-10 = 10 и 10-0 = 10. Вот как вы получаете 3 10 – ElKamina

ответ

2

Вы знаете, что T [30] = 3. Вы должны найти T [30-c] = 2, пробуя все c в {1, 10, 25}. Как T [30-10] = 2, вы знаете, что вы будете использовать монетку в 10 центов и теперь должны решить проблему для T [20].

Повторите это до T [0] = 0.