Проблема смены монет очень хорошо задокументирована. Учитывая бесконечный запас монет номиналов x_1
в x_m
вам нужно найти число комбинаций , которые добавляют до y
. Например, дано x = {1,2,3}
и y = 4
у нас есть четыре комбинации:
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
Вступление
Существует несколько вариантов проблемы с обменом монет. В этом варианте у нас есть два дополнительных ограничения:
- Каждая деноминация должна использоваться хотя бы один раз.
- Точно фиксированное количество монет должно быть использовано в общей сложности.
Например, учитывая x = {1,2,3}
, y = 36
и n = 15
где n
общее количество монет, которые должны быть использованы, мы получаем четыре комбинации:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1, 7 двойок, 7 тройок){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2, 5 двойок, 8 тройок){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3, 3 двойки, 9 тройок){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4, 1 двойка, 10 тройка)
Вызов
Задача состоит в том, чтобы написать функцию enumerate
на языке по вашему выбору, которая перечисляет все комбинации, как описано выше, с учетом:
- Список конфессий. Например
{1,5,10,25}
. Вы можете использовать списки или массивы. - Неотрицательное целое число,
y
которое обозначает сумму каждой комбинации. - Неотрицательное целое число,
n
которое обозначает общее количество монет.
Порядок аргументов не имеет значения. Точечные функции разрешены.
Выходные данные enumerate
функции должны быть списком комбинаций. Каждая комбинация должна быть уникальной, и это должен быть список n
целых чисел, которые складываются в y
. Каждое наименование должно появляться хотя бы один раз в каждой комбинации, и ни одна комбинация не должна отсутствовать. Порядок целых чисел и комбинаций не имеет значения. Вы можете использовать списки или массивы для вывода.
Имейте в виду следующие крайние случаи:
- Если оба
y
иn
равны нулю и список наименований пуст, то на выходе получается список из одной комбинации, пустой комбинации (то есть{{}}
). - В противном случае, если
y
ноль,n
ноль или список наименований пуст, то на выходе получается список нулевых комбинаций (т.е.{}
). - В более общем смысле, если
y
меньше, чем сумма достоинств илиn
меньше, чем число достоинств, то результатом является список нулевых комбинаций.
Оценка будет зависеть от размера всей программы в байтах. Обратите внимание, что это включает в себя enumerate
функцию, вспомогательные функции, операторы импорта и т. Д. Оно не включает тестовые случаи.
y
меньше суммы деноминаций, то в какой-то момент вашего рекурсивного решения вы достигнете базового случая, когда список конфессий пуст. Следовательно, ответ будет {}
(т.е. решение не найдено). Если n
число конфессий меньше, то в конечном итоге вы достигнете базового варианта, где, n = 0
но y != 0
. Следовательно, ответ снова будет {}
.