Помогите срочно ответить .
Дата публикации:

Помогите срочно ответить .

820c0b0b

Помогите срочно ответить .

Для решения данной задачи можно использовать динамическое программирование.

Пусть dp[i] - количество хороших расписаний для i фильмов. Тогда dp[i] можно выразить через предыдущие значения dp[j], где j < i.

Для каждого i от 1 до M, мы можем выбрать фильм, который будет показан на i-м сеансе. Если мы выбрали фильм x, то перед этим сеансом должно быть K сеансов, на которых показывались другие фильмы. Таким образом, мы можем выбрать фильм для i-го сеанса из N - 1 фильмов (так как фильм x уже был показан на предыдущих сеансах).

Таким образом, формула для dp[i] будет следующей: dp[i] = (N - 1) dp[i - 1] + (N - 1) (N - 2) * dp[i - K - 1]

Начальные значения: dp[0] = 1 (так как для 0 фильмов существует только одно расписание - пустое) dp[1] = N (так как для 1 фильма мы можем выбрать любой из N фильмов)

Теперь мы можем вычислить dp[M] и вывести его по модулю 1000000007.

Пример кода на Python:

N, M, K = map(int, input().split())

dp = [0] * (M + 1) dp[0] = 1 dp[1] = N

for i in range(2, M + 1): dp[i] = (N - 1) dp[i - 1] + (N - 1) (N - 2) * dp[i - K - 1] dp[i] %= 1000000007

print(dp[M])