Алгоритмическое решение для оплаты определенной суммы денег из банкомата с использованием макс. Количество более высоких банкнот
Привет
У меня есть вопрос, который является скорее алгоритмическим, чем программным. Из этого следует:
У нас есть банкноты 100, 50, 20, 10, 5 и 1 (любая валюта) в банкомате, с конкретными суммами каждого номинала (вы можете проверить и получить сумму каждого номинала).
Приходит клиент и хочет снять в банкомате определенную сумму денег.
Мне нужен алгоритм определения наиболее оптимальных сумм каждого номинала для оплаты клиенту, "оптимальный" означает использование максимального количества более высоких банкнот. например, если клиент хочет нарисовать 150, оптимальным решением будет 1 банкнота 100 и 1 банкнота 50 (а не три 50).
Алгоритм должен решить, возможно ли решение с заданным количеством банкнот в банкомате и prpopse оптимальное решение. Если это вообще невозможно, он уведомит клиента и предложит решение, которое позволит клиенту заплатить "a min. сумма денег больше", чтобы они могли получить то, что хотят. То есть, если они хотят нарисовать 173, а это невозможно, алгоритм должен вернуть "я не могу заплатить вам 173, но заплатите еще 2, и я могу заплатить вам 175!
Решение очень срочное и действительно очень ценю любую помощь.
Заранее спасибо
Что я уже пробовал:
Я ожидаю, что у кого-то уже есть решение этой или подобной проблемы