
Друзья, давайте разберем вчерашние задачи. 🪜
Общий подход к решению таких задач называют динамическим программированием. Он заключается в том, что мы делим решаемую задачу на более мелкие подзадачи. Решив их, мы можем построить ответ и для задачи побольше.
Сначала поговорим про первую задачу. На
Введем функцию
К примеру, чтобы добраться до
Начиная с
P.S. Особо внимательные заметили, что рекуррентная формула для вычисления ответа на задачу в точности совпадает с рекуррентной формулой для подсчета
Теперь можем приступить к решению второй задачи. Аналогично первой, можем составить рекуррентную формулу:
Начиная с
#разборазадачи
Общий подход к решению таких задач называют динамическим программированием. Он заключается в том, что мы делим решаемую задачу на более мелкие подзадачи. Решив их, мы можем построить ответ и для задачи побольше.
Сначала поговорим про первую задачу. На
i
-ую ступеньку мы можем попасть только в том случае, если совершим прыжок на 1
ступеньку вверх с (i-1)
-ой ступеньки или совершим прыжок на 2
ступеньки вверх с (i-2)
-ой ступеньки.Введем функцию
f(n)
, которая будет равна количеству способов добраться до n
-ой ступеньки. Тогда из соображений выше получаем рекуррентную формулу: f(n) = f(n-1) + f(n-2)
.К примеру, чтобы добраться до
7
-ой ступеньки, мы должны либо совершить прыжок с 6
-ой ступеньки, либо совершить прыжок с 5
-ой ступеньки. Тогда количество способов добраться до 7
-ой ступеньки равно сумме количеств способов добраться до 5
-й ступеньки и до 6
-й ступеньки.Начиная с
n = 2
, мы можем последовательно вычислять значения данной функции. Формально изначально Кемаль находится на 0
-й ступеньке и f(0) = 1
, несложно догадаться, что тогда f(1) = 1
. Далее находим f(2) = f(0) + f(1) = 2, f(3) = f(1) + f(2) = 3, f(4) = f(2) + f(3) = 5, f(5) = f(3) + f(4) = 8, f(6) = f(4) + f(5) = 13, f(7) = f(5) + f(6) = 21
.P.S. Особо внимательные заметили, что рекуррентная формула для вычисления ответа на задачу в точности совпадает с рекуррентной формулой для подсчета
n
-го числа Фибоначчи.Теперь можем приступить к решению второй задачи. Аналогично первой, можем составить рекуррентную формулу:
f(n) = f(n-1) + f(n-2) + f(n-4)
.Начиная с
n = 4
, мы можем пользоваться данной формулой. Несложно догадаться, что f(0) = 1, f(1) = 1, f(2) = 2, f(3) = 3
. Тогда f(7) = 31
.#разборазадачи