Выдача суммы банкнотами (Cash Dispenser)
3
Жадные алгоритмы
Условие:
Реализуйте функцию, которая определяет, можно ли выдать запрошенную сумму заданным набором номиналов банкнот с учётом ограниченного количества банкнот каждого номинала, и если можно — возвращает состав выдачи (сколько банкнот каждого номинала использовано). Набор номиналов и их доступное количество передаются как конфигурация. Если собрать сумму из доступных банкнот невозможно (не хватает номиналов или банкнот), функция должна вернуть признак невозможности выдачи вместо набора банкнот.
Входные данные:
amount— запрошенная сумма, целое положительное числоbills— конфигурация доступных банкнот: список записей вида{ value, count }, гдеvalue— номинал,count— сколько банкнот этого номинала доступно
Выходные данные: объект вида { success: true, breakdown: [{ value, count }, ...] } с составом выдачи (только номиналы с count > 0), либо { success: false, breakdown: null }, если сумму выдать нельзя
Ограничения:
1 <= amount <= 10^7Количество различных номиналов ≤ 20
countдля каждого номинала в пределах0 <= count <= 1000Номиналы — положительные целые числа, без дублирующихся значений в списке
Пример:
Вход: amount = 130, bills = [{value: 100, count: 2}, {value: 50, count: 1}, {value: 10, count: 5}]
Выход: { success: true, breakdown: [{value: 100, count: 1}, {value: 10, count: 3}] }
Вход: amount = 45, bills = [{value: 100, count: 2}, {value: 50, count: 1}]
Выход: { success: false, breakdown: null }
Вход: amount = 0, bills = [{value: 10, count: 5}]
Выход: { success: true, breakdown: [] }