Пари з людей#11288

Пари з людей (Розбір)

Нехай — кількість різних способів, якими всі чоловік можуть приєднатися до танцю. Наприклад,

Розглянемо -ту людину:

Таким чином маємо співвідношення:

f(n) = f(n - 1) + (n - 1) \cdot f(n - 2)

Приклад

Нехай є n = 3 людей. Вони можуть приєднатися до танцю способами:

Обчислимо за формулою:

f(3) = f(2) + 2 \cdot f(1) = 2 + 2 \cdot 1 = 4

Реалізація алгоритму

Оголосимо модуль і масив для зберігання результатів: dp[n] = f(n).

#define MOD 1000000007
long long dp[100001];

Читаємо вхідне значення .

scanf("%d", &n);

Послідовно обчислюємо значення f(1), f(2), ..., f(n), запам'ятовуючи результати в масиві .

dp[1] = 1; dp[2] = 2;
for (i = 3; i <= n; i++)
  dp[i] = (dp[i - 1] + (i - 1) * dp[i - 2]) % MOD;

Виводимо відповідь.

printf("%lld\n", dp[n]);

Python реалізація

Оголосимо модуль , за яким будуть проводитися обчислення.

MOD = 1000000007

Читаємо вхідне значення .

n = int(input())

Оголосимо список для зберігання результатів: dp[n] = f(n).

dp = [0] * (n + 1)

Послідовно обчислюємо значення f(1), f(2), ..., f(n), запам'ятовуючи результати в масиві .

dp[1] = 1
if n > 1: dp[2] = 2
for i in range(3, n + 1):
  dp[i] = (dp[i - 1] + (i - 1) * dp[i - 2]) % MOD

Виводимо відповідь.

print(dp[n])