РУҚА
Задания № 16, 25 · ЕГЭ

Маршрут Кузнечика

Как находить достижимость точек и считать число маршрутов исполнителя Кузнечика
6 мин чтенияСложность: Обновлено 29 сентября 2026

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

Модель движения Кузнечика

Положение Кузнечика задаётся целым числом на числовой оси. Обычно начальная точка обозначается \(0\) или \(a\), а конечная — \(N\) или \(b\). За один ход Кузнечик может прыгнуть вправо на одну из разрешённых длин: например, на \(1\), \(2\) или \(3\) единицы. Прыжки влево либо запрещены условием, либо рассматриваются отдельно.

D
Маршрут

Маршрут — это последовательность разрешённых прыжков, которая переводит Кузнечика из начальной точки в конечную. Два маршрута считаются различными, если отличаются хотя бы порядком прыжков.

Например, при прыжках на \(1\) и \(2\) путь \(1+2\) отличается от пути \(2+1\), хотя оба дают перемещение на \(3\). Если требуется попасть именно в точку \(N\), сумма длин прыжков должна быть равна \(N-a\).

T
Условие достижимости

Точка достижима, если существует хотя бы одна последовательность разрешённых прыжков, сумма которых равна расстоянию от начальной точки до этой точки. Если разрешены прыжки на \(p\) и \(q\), нужно проверить существование неотрицательных целых \(u\) и \(v\), для которых \(up+vq=N-a\).

\[up+vq=N-a,\qquad u,v\in\mathbb{Z}_{\ge 0}\]1

При нескольких командах нельзя просто проверять делимость на одну длину: одна точка может достигаться комбинацией разных прыжков. Например, при длинах \(4\) и \(6\) точка на расстоянии \(14\) достижима: \(14=4+4+6\).

Подсчёт маршрутов рекурсией

Для подсчёта маршрутов удобно рассуждать о последнем прыжке. Пусть \(F(x)\) — число маршрутов из начальной точки \(0\) в точку \(x\), а разрешённые прыжки имеют длины \(p_1,p_2,\ldots,p_k\). Последний прыжок в точку \(x\) мог начинаться из одной из точек \(x-p_i\).

\[F(x)=F(x-p_1)+F(x-p_2)+\dots+F(x-p_k)\]2

Если некоторые точки не существуют или запрещены, соответствующее слагаемое не добавляется. Для старта используется базовый случай: в начальной точке есть ровно один пустой маршрут — маршрут, который ещё не сделал ни одного прыжка.

D
Базовый случай

\(F(0)=1\). Это не означает, что Кузнечик уже сделал ход. Единица нужна для подсчёта маршрутов, начинающихся первым прыжком из точки \(0\). Для недостижимой точки значение равно \(0\).

Такой способ связан с рекурсивным алгоритмом: значение для точки вычисляется через значения для меньших точек. В рекурсивной записи особенно важно правильно задать базовый случай, иначе программа может зациклиться или получить неверный ответ.

1
Пусть разрешены прыжки на 1 и 2, а \(F(x)\) — число маршрутов в точку \(x\). В точку \(x\) можно прийти из \(x-1\) или из \(x-2\).
F(x)=F(x-1)+F(x-2)
2
Начальная точка имеет один пустой маршрут, а в отрицательные точки попасть нельзя.
\(\displaystyle F(0)=1,\qquad F(x)=0\text{ при }x<0\)
3
Вычисляем значения слева направо.
\(\displaystyle F(1)=1,\ F(2)=2,\ F(3)=3,\ F(4)=5\)
4
Следовательно, в точку 4 ведут пять маршрутов: 1111, 112, 121, 211 и 22.
F(4)=5
Микро-проверка

Кузнечик прыгает на 1 или 2 клетки. Сколько маршрутов ведёт из 0 в 3?

Динамика и запретные точки

Если значение \(F(x)\) вычислять много раз независимо, рекурсивная программа повторяет одни и те же вычисления. Для больших \(N\) применяют динамику для маршрутов Кузнечика: значения хранят в таблице и рассчитывают по порядку от начальной точки к конечной.

  1. Создать таблицу \(F[0\ldots N]\) и положить \(F[0]=1\).
  2. Для каждой точки \(x\) слева направо проверить все разрешённые прыжки.
  3. Добавить \(F[x]\) к значению точки \(x+p_i\), если она не выходит за границу.
  4. После обработки всех точек получить ответ \(F[N]\).

Запретные точки рассматриваются в задачах с препятствиями на поле Кузнечика. Если точка \(z\) запрещена, Кузнечик не может в неё приземлиться, поэтому \(F[z]=0\). Кроме того, из неё нельзя продолжать движение: её значение не добавляется к следующим точкам.

\[F[z]=0\quad\text{для запретной точки }z\]3

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

№
Разобранный пример с препятствием

Кузнечик стартует в точке \(0\), прыгает на \(1\) или \(2\), должен попасть в \(5\), а точка \(3\) запрещена. Найдём число маршрутов.

1
Начинаем с базового значения.
F(0)=1
2
В точку 1 можно прийти только из 0.
F(1)=F(0)=1
3
В точку 2 можно прийти из 1 или из 0.
F(2)=F(1)+F(0)=2
4
Точка 3 запрещена, поэтому её значение принудительно равно нулю.
F(3)=0
5
В точку 4 можно прийти из 3 или из 2. Путь через 3 невозможен.
F(4)=F(3)+F(2)=0+2=2
6
В точку 5 можно прийти из 4 или из 3.
F(5)=F(4)+F(3)=2+0=2
7
Ответ: допустимы маршруты 1+1+1+2 и 1+1+2+1.
\(\displaystyle \boxed{F(5)=2}\)

Достижимость и ограничения

Задачи на конечную клетку Кузнечика могут спрашивать не число маршрутов, а сам факт достижимости. Для этого достаточно проверить, что значение \(F(N)\) положительно, если подсчёт маршрутов выполнен без переполнения и дополнительных условий.

\[N\text{ достижима}\Longleftrightarrow F(N)>0\]4

Иногда условие задаётся не списком прыжков, а командами исполнителя. Сначала разберите команду Кузнечика: выясните, на сколько клеток разрешено перемещаться, можно ли прыгать влево, повторяется ли команда и есть ли ограничения на число ходов.

Если прыжки направлены только вправо, координата после каждого хода увеличивается, поэтому таблицу можно заполнять слева направо. Если разрешены прыжки в обе стороны, такой порядок обычно уже не работает: могут появиться циклы и бесконечное число маршрутов. В этом случае нужно внимательно изучать ограничение на число ходов или множество состояний.

!
Частые ошибки

<ul><li>Считать комбинации, но забывать, что порядок прыжков важен.</li><li>Положить \(F(0)=0\) вместо \(F(0)=1\).</li><li>При препятствии убрать только один переход, но оставить ненулевым значение самой запрещённой точки.</li><li>Разрешить прыжок за конечную точку, если условие требует попасть в неё впервые или двигаться только внутри отрезка.</li><li>Путать число маршрутов с числом посещённых точек.</li></ul>

Как быстро выбрать способ решения

Если спрашивают «можно ли попасть», ищите существование хотя бы одного маршрута. Если спрашивают «сколько способов», вводите \(F(x)\). При препятствиях обнуляйте запрещённые точки. При большом диапазоне используйте таблицу динамики, а не прямое дерево рекурсивных вызовов.

Связь с рекурсивным деревом

При прямой рекурсии один и тот же подрезультат вычисляется многократно. Например, при прыжках на 1 и 2 значение \(F(5)\) обращается к \(F(4)\) и \(F(3)\), а затем снова получает эти же значения из других ветвей. Дерево рекурсивных вызовов наглядно показывает повторы.

Запоминание уже найденных значений называется мемоизацией. По сути, это тот же принцип динамики: каждое состояние решается один раз. Подробнее о подсчёте маршрутов можно читать на странице подсчёт маршрутов Кузнечика.

СитуацияЧто хранитьУсловие ответа
Только достижимость0 или 1Значение равно 1
Число маршрутовF(x)F(N)
ПрепятствияF(x), с обнулениемF(N)>0 или точное число
Ограничение на число ходовF(x,k)Значение состояния конечной точки
Q
Быстрый тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · формула перехода
Кузнечик прыгает на 1 или 3 клетки. Как записать переход для числа маршрутов в x?
Главное за минуту

Главное

  • Маршрут задаётся последовательностью прыжков, причём порядок прыжков важен.
  • Для подсчёта маршрутов используется переход \(F(x)=\sum F(x-p_i)\) и базовый случай \(F(0)=1\).
  • Запретная точка получает значение \(0\) и не передаёт маршруты дальше.
  • Точка достижима тогда и только тогда, когда число маршрутов в неё положительно.
  • При больших координатах применяйте динамику или мемоизацию, чтобы не вычислять одинаковые состояния повторно.