Вы находитесь на странице: 1из 2

Идея решения

Для лесницы из одной ступеньки 1 способ её пройти, для лесницы из двух ступенек
2 способа, из трёх ступенек = кол-во спобов пройти 1 ступеньку + кол-во способов
пройти 2 ступеньки и т.д. Начнём с третьей ступеньки.

Код программы
public class Steps {
public static void main(String[] args) {
final int n = 6;
int current = 2; // number variants for current step.
int previous = 1; // number variants for previous step.
for (int i = 2; i < n; i++) {
previous = previous + current;
current = previous - current;
previous = previous - current;
current = current + previous;
}
System.out.println(current);
}
}

Комбинаторное решение
Для удобства переформулируем задачу (изменим термины). Лестница станет стро-
кой в таблице. Ступеньки станут клетками в этой строке. Таким образом, нужно найти
кол-во разных способов пройти по клеткам строки, если один шаг может быть разме-
ром в одну или в две клетки.
Одну клетку будем представлять в виде одинарной клетки, две клетки будем пред-
ставлять в виде одной двойной клетки.
Рассмотрим несколько первых случаев:
Размер строки 1 клетка =⇒ её можно “пройти” одним способом: в виде одной
одинарной клетки.
Размер строки 2 клетки =⇒ её можно “пройти” двумя способами: 1 двойная
клетка или 2 одинарные клетки.
Размер строки 3 клетки =⇒ её можно “пройти” тремя способами: 1 двойная + 1
одинарная, 1 одинарная + 1 двойная, 3 одинарные.
И т. д.
Чтобы найти ответ, необходимо для каждого случая найти все различный способы
расстановки одинарных и двойных клеток, а после эти перестановки для всех случаев
просуммировать.
Немного теории:
Пусть у нас есть N1 чёрных шаров и N2 белых шаров, кол-во способов переме-
шать чёрные и белые шары равно (N1 + N2 )!, однако такой вариант учитывает

1
перестановки, когда подряд лежащие шары одного цвета просто меняют свои
места относительно друг друга. Чтобы этого избежать необходимо провести
разупорядочивание чёрных и белых шаров, получим (NN11+N 2 )!
!·N2 ! . Перенесём это
на наши клетки.

Рассмотрим случай, когда строка состоит из N одинарных клеток, тогда способов


их переставить (из формулы выше) - N !
N ! = 1, т.к. одинарных клеток N1 = N и двойных
клеток N2 = 0.
Рассмотрим случай, когда строка состоит из одной двойной клетки N2 = 1 и остав-
−1)!
шихся одинарных N1 = N − 2. Кол-во перестановок - (N(N−2)!·1! .
Рассмотрим случай, когда строка состоит из двух двойных клеток N2 = 2 и остав-
−2)!
шихся одинарных N1 = N − 4. Кол-во перестановок - (N(N−4)!·2! .
И т.д., последний случай будет, когда строка состоит из всех двойных клеток клеток
(N - чётное) или из всех двойных и одной одинарной клеток (N - нечётное). И кол-во
(N − N2 )!
перестановок будет (N −( N )·2)!· N .
2 2!
Таким образом, получаем ответ в виде следующей конечной суммы:

N! (N − 1)! (N − 2)! (N − 3)! (N − N2 )!


+ + + + ... + .
N ! (N − 2)! · 1! (N − 4)! · 2! (N − 6)! · 3! (N − ( N2 ) · 2)! · N
2!

В таком виде трудоёмкость вычисления данного выражения очень велика, но такие


выражения после математических преобразований с использованием закономерностей
биномиальных коэффициентов часто сводятся к выражениям со степенями, что может
позволить получить решение задачи за константное время O(1).

Примеры использования полученной формулы


Пример 1
При N = 6:
6! 5! 4! 3! 4·3
+ + + =1+5+ + 1 = 13.
6! 5! · 1! 2! · 2! 0! · 3! 2
Пример 2
При N = 7:
7! 6! 5! 4! 5·4
+ + + =1+6+ + 4 = 21
7! 5! · 1! 3! · 2! 1! · 3! 2
.