Георгий Бочонок
Мастер
(1626)
3 недели назад
Инициализация таблицы: Создадим таблицу размером 8x10 (80 клеток). Заполним клетки, которые являются запрещёнными (24 клетки), нулями. Начальная клетка (верхний левый угол) будет равна 1, так как лягушка начинает свой путь именно здесь.
Заполнение таблицы: Для каждой клетки, если она не запрещена, вычисляем количество способов добраться до неё как сумму способов добраться до клетки сверху и слева.
Результат: Значение в нижнем правом углу таблицы будет искомым количеством способов.
Пример:
Предположим, у нас есть таблица 3x3, и запрещённых клеток нет. Тогда количество способов будет выглядеть так:
text
1 1 1
1 2 3
1 3 6
В данном случае, количество способовдобраться до нижнего правого угла — 6.
Применение к вашей задаче:
Создайте таблицу 8x10 и отметьте 24 запрещённые клетки.
Заполните таблицу по описанному алгоритму.
Итоговое значение в нижнем правом углу будет ответом.
Если запрещённые клетки расположены случайно, точное количество способов можно вычислить только после заполнения таблицы.
Дмитрий Смекалов
Мудрец
(15990)
3 недели назад
Эта задача решается методом динамического программирования на сетке (гриде).
Нужно знать точные размеры сетки (например, 8x10 клеток, 10x8, или другие размеры, дающие в сумме 80) и точные координаты 24 "плохих" клеток.
Без этих данных точное число вариантов посчитать невозможно, но я опишу сам алгоритм.
Предположим, у нас есть сетка размером N строк и M столбцов (где N * M = 80).
Лягушка стартует в [0, 0] (верхний левый угол), царевич в [N-1, M-1] (нижний правый).
Создаем двумерный массив (таблицу) dp[N][M], где dp[i][j] будет хранить количество способов дойти до клетки [i, j].
Инициализируем таблицу нулями.
Если стартовая клетка [0, 0] не заблокирована, устанавливаем dp[0][0] = 1. Если заблокирована, то путей 0.
Заполняем первую строку: для каждой клетки [0, j] (j от 1 до M-1), если она не заблокирована, то dp[0][j] = dp[0][j-1]. Если клетка [0, j] заблокирована или dp[0][j-1] было равно 0, то dp[0][j] = 0.
Заполняем первый столбец: для каждой клетки [i, 0] (i от 1 до N-1), если она не заблокирована, то dp[i][0] = dp[i-1][0]. Если клетка [i, 0] заблокирована или dp[i-1][0] было равно 0, то dp[i][0] = 0.
Проходим по остальным клеткам таблицы (i от 1 до N-1, j от 1 до M-1).
Для каждой клетки [i, j]:
Если клетка [i, j] заблокирована (одна из 24 плохих), то dp[i][j] = 0.
Если клетка [i, j] не заблокирована, то dp[i][j] = dp[i-1][j] + dp[i, j-1] (количество путей сверху + количество путей слева).
Итоговое количество вариантов будет храниться в последней ячейке таблицы dp[N-1][M-1].
Чтобы получить число, нужны точные размеры сетки (N и M) и список координат заблокированных клеток.