На странице представлен фрагмент
Реши любую задачу с помощью нейросети.
Дана игровая доска размером n строк и m столбцов. Каждая клетка содержит целое число aij. Фишка начинает находиться в клетке (1, 1) и нужно переместить её в клетку (n, m).
Для перемещения фишки нам нужно найти клетку, в которую мы можем переместиться за один ход. Это возможно, если НОД (Qiij, Qij) > 1, где Qiij – число в клетке (i, j), а Qij – число в клетке, в которую мы хотим переместиться.
Переберем все возможные клетки, в которые можем переместить фишку за один ход, и найдем минимальное количество таких ходов, необходимых для достижения клетки (n, m).
Для этого создадим двумерный массив dp размером n x m, где dp[i][j] будет содержать минимальное количество ходов, необходимых для достижения клетки (i, j). Изначально все значения dp[i][j] будут равны бесконечности, кроме dp[1][1], которое будет равно нулю.
Теперь переберем все клетки (i, j) от (1, 1) до (n, m) и проверим, можно ли переместиться в эту клетку за один ход. Если это возможно, то обновим значение dp[i][j] = min(dp[i][j], dp[i-1][j-1] + 1), где dp[i-1][j-1] – минимальное количество ходов, необходимых для достижения предыдущей клетки (i-1, j-1).
В конце, ответом на задачу будет значение dp[n][m], которое будет содержать минимальное количество ходов, необходимых для перемещения фишки из клетки (1, 1) в клетку (n, m).
Алгоритм работает со сложностью O(n*m), что должно быть достаточно быстро для заданных ограничений на размер доски.
Пример решения:
1. Создаем массив dp размером n x m и заполняем все значения infinity, кроме dp[1][1] = 0.
2. Перебираем все клетки (i, j) от (1, 1) до (n, m).
3. Для каждой клетки проверяем условие НОД (Qiij, Qij) > 1:
– Если условие выполняется, обновляем значение dp[i][j] = min(dp[i][j], dp[i-1][j-1] + 1).
4. По окончании перебора, ответом на задачу будет dp[n][m].
Например, для доски 3×3 с числами [2, 3, 4], [5, 6, 7], [8, 9, 10]:
– Инициализируем dp таким образом: [[0, inf, inf], [inf, inf, inf], [inf, inf, inf]]
– Перебираем клетки:
– dp[1][1] = min(inf, 0 + 1) = 1
– dp[1][2] = inf (НОД(3,2) = 1)
– dp[1][3] = inf (НОД(4,3) = 1)
– dp[2][1] = inf (НОД(5,2) = 1)
– dp[2][2] = inf (НОД(6,6) = 6)
– dp[2][3] = inf (НОД(7,9) = 1)
– dp[3][1] = inf (НОД(8,5) = 1)
– dp[3][2] = inf (НОД(9,4) = 1)
– dp[3][3] = inf (НОД(10,10) = 10)
– Ответ: dp[3][3] = 1