Задача
Подсчитайте количество способов, которыми можно получить сумму n бросая игральный кубик один или несколько раз. Каждый бросок дает результат между 1 и 6.
Например, если n=3, то имеется 4 способа:
1 + 1 + 1
1 + 2
2 + 1
3
Входные данные
Одно целое число n (1⩽n⩽106).
Выходные данные
Выведите количество способов по модулю 109+7.
Тесты
№ | Входные данные | Выходные данные |
1 | 1 | 1 |
2 | 3 | 4 |
3 | 5 | 16 |
4 | 6 | 32 |
5 | 8 | 123 |
Код программы
Решение
Создадим массив на n+1 элемент. В который мы сразу запишем количество перестановок для сумм 1,2..,6. Для остальных случаев, когда n>7 воспользуемся следующей идеей. Будем вычислять количество перестановок для сумм, начиная с 7 до тех пор, пока не дойдем до заданного нам n. Будем делать это по такой формуле ai=ai−1+ai−2+ai−3+ai−4+ai−5+ai−6 . Для первых шести сумм вычисляем по этой же формуле, с учетом, что 0<i−k(1⩽k⩽6) и добавляя еще 1 перестановку, так как мы можем получить сумму ( i ), подбросив кубик 1 раз. Рассмотрим для n=7. Чтобы получить 7 достаточно подбросить кубик ещё один раз, так как мы знаем количество для n от 1 до 6. Если выпадет 1, то остается a6 возможных перестановок, если выпадет 2, то остается a5 и так далее. Затем нам требуется просуммировать, так как кубик может выпасть 6 способами, как было сказано ранее. Соответственно для n=8 количество комбинаций увеличится на a7 и уменьшится на a1, так как кубик имеет только 6 граней.
Ссылки
Условие задачи на e-olymp
Код программы на ideone