Python

PYTHON! Требуется определить количество способов выплаты n рублей монетами по 1, 2, 5 и 10 рублей.

Помогите решить задачу на python c помощью вложенных циклов: Требуется определить количество способов выплаты n рублей монетами по 1, 2, 5 и 10 рублей.

Формат входных данных
На вход программе дается одно натуральное число n (n≤99).

Формат выходных данных
Требуется вывести одно число — ответ на задачу.

входные данные
13
выходные данные
16

входные данные
42
выходные данные
220

входные данные
5
выходные данные
4
Тут вложенные циклы надо начинать с самых крупных монет в порядке убывания их номиналов. А вообще-то задачи перечислительной комбинаторики не для Питона -на нём же всё медленно, а у комбинаторных задач на размен монетами или купюрами может быть довольно таки большАя временнАя сложность! Код внизу для небольших n можно проверить вручную -там всё работает корректно и практически мгновенно, а как его ещё больше оптимизировать для бОльших n чем у меня -пока не вижу, но когда я с телефона код запустила для n=666, у меня получилось 512550, а считалось всё это более трёх минут. На нормальном компьютере всё быстрее, естественно, но алгоритм всё равно ведь сложный черезчур!
KV
Kravchuk Viachaslav
66 572
Лучший ответ
Принцип решения вложенными циклами угадывается. Громоздко только будет наверное...
Например для входных данных 5 результат 4
Счетчик изначально равен нулю.
Массив равен [1,2,5,10]
Требуется получить это:
1+1+1+1+1=5
1+2+2=5
5=5
1+1+1+2=5
Внешний цикл берет первый элемент 1. Внутренний цикл до пяти раз пробегает по массиву и складывает элементы пока не получилось 5
1+2+2=5? Ага, прерываем цикл и плюсуем счетчик на 1. Переходим к следущему элементу.
1+5 > 5
1+10 > 5
Пролет...
Переходим к элементу 2
2+1+1+1= 5. Ага... Плюсуем счетчик
2+1+2=5 ...плюсуем счетчик
2+5>5 ...мимо
если ты не знаешь, что такое вложенные циклы - тебе никто не поможет.
Игорь Пак
Игорь Пак
50 253
Владимир Васильев Проще через динамическое вроде