Я пытаюсь решить эту проблему:
Предположим, у меня есть набор из n монет {a_1, a2, ..., a_n}. Монета со значением 1 всегда будет появляться. Какое минимальное количество монет мне нужно, чтобы достичь M?
Ограничения:
- 1 ≤ n ≤ 25
- 1 ≤ m ≤ 10^6
- 1 ≤ a_i ≤ 100
Хорошо, я знаю, что это проблема внесения изменений. Я пытался решить эту проблему, используя поиск в ширину, динамическое программирование и жадность (что неверно, поскольку не всегда дает лучшее решение). Однако я получаю сообщение о превышении лимита времени (3 секунды).
Поэтому мне интересно, есть ли оптимизация для этой проблемы. Описание и ограничения привлекли мое внимание, но я не знаю, как использовать это в свою пользу:
- Монета со значением 1 всегда будет появляться.
- 1 ≤ a_i ≤ 100
Я видел в википедии, что эту проблему также можно решить с помощью «Динамического программирования с вероятностным деревом свертки». Но я ничего не мог понять.
Вы можете помочь мне? Эту проблему можно найти здесь: http://goo.gl/nzQJem