я просматривал мои подачки для нашего класса алгоритма, и я начал думать об этом вопросе:всех решений для изменения решений с динамическим программированием
Учитывая различные типы монет с различными значениями, найти все конфигурации монеты сложить до определенной суммы без дублирования.
Во время класса мы решили проблему, чтобы найти количество возможных путей для суммы и наименьшего количества монет для суммы. Однако мы никогда не пытались найти решения.
Я думал о решении этой проблемы при динамическом программировании.
Я пришел с версией рекурсии (для простоты я только напечатать решения):
void solve(vector<string>& result, string& currSoln, int index, int target, vector<int>& coins)
{
if(target < 0)
{
return;
}
if(target == 0)
{
result.push_back(currSoln);
}
for(int i = index; i < coins.size(); ++i)
{
stringstream ss;
ss << coins[i];
string newCurrSoln = currSoln + ss.str() + " ";
solve(result, newCurrSoln, i, target - coins[i], coins);
}
}
Однако я застрял при попытке использовать DP, чтобы решить эту проблему. У меня есть 2 основных препятствия:
- Я не знаю, что структура данных следует использовать для хранения предыдущих ответов
- Я не знаю, что моя снизу вверх процедура (с использованием циклов замены рекурсии) следует выглядит как.
Любая помощь приветствуется, и некоторые коды будут оценены!
Спасибо за ваше время.
Для меня это не сразу становится очевидным, если вы можете использовать динамическое программирование для этой проблемы. Если я нахожу 50 центов, добавьте одну четверть и «рекурсию» на 25 центов, которая найдет 1 квартал и 5 ников. Затем я вернусь к началу, попробуйте 5 ников и проверьте результаты 25 центов, которые находят рассчитанные 2 решения, поэтому я говорю, что есть 4 общих решения. Но 1 квартал + 5 ников и 5 ников + 1 квартал - это дубликаты. –
Может быть экспоненциально много возможных решений для изменения, поэтому DP поможет, но может по-прежнему выполнять действительно, очень долгое время. Ты в порядке с этим? – templatetypedef
Я написал наивную версию для сравнения: http://coliru.stacked-crooked.com/a/d2c06ff6aa2ea45a –