К списку задач
Средне Решено: 0 Процент решений: 0%

Подсчёт последовательностей бросков кубика

Посчитайте количество упорядоченных последовательностей бросков кубика с заданной суммой.

Чему вы научитесь

  • Строить ответы из меньших сумм
  • Писать рекурренту по последнему броску
  • Брать результаты по модулю большого простого числа

Условие

Стандартный кубик даёт целое число от 1 до 6. Посчитайте все непустые упорядоченные последовательности результатов бросков, сумма которых равна target. Разные порядки считаются разными последовательностями. Верните количество таких последовательностей по модулю 1,000,000,007.

Реализуйте функцию dice_combinations(target).

Ввод

target: Требуемая сумма всех бросков.

Вывод

Верните количество последовательностей по модулю 1,000,000,007.

Ограничения

1 ≤ target ≤ 1,000,000. Взятие количества по модулю 1,000,000,007 означает возврат остатка от деления этого числа на 1,000,000,007.

Примеры

Пример 1
Ввод:
target = 2

Ожидаемый вывод:
expected = 2
Ввод:
long long target = 2;

Ожидаемый вывод:
long long expected = 2;
Ввод:
long target = 2;

Ожидаемый вывод:
long expected = 2;

Пояснение

Две последовательности: [2] и [1, 1].

Пример 2
Ввод:
target = 4

Ожидаемый вывод:
expected = 8
Ввод:
long long target = 4;

Ожидаемый вывод:
long long expected = 8;
Ввод:
long target = 4;

Ожидаемый вывод:
long expected = 8;

Пояснение

Последовательности: [4], [1,3], [3,1], [2,2], [1,1,2], [1,2,1], [2,1,1] и [1,1,1,1].

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Думайте о меньших суммах как о строительных блоках для целевой суммы.

Подсказка 2

Используйте накопленный счёт для каждой суммы на основе предыдущих шести сумм.

Подсказка 3

Не забывайте применять modulo на каждом сложении и отдельно обрабатывать суммы меньше 1.

Ожидаемая сложность

O(target) по времени, O(target) доп. памяти

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.