Головоломка — NxN сетка из ve, -ve целых чисел. Найдите оптимальный путь через нее

#puzzle

#Головоломка

Вопрос:

У вас есть NxN сетка, содержащая набор положительных и отрицательных чисел, и вы должны найти оптимальный путь через нее. Путь должен проходить ровно через одну ячейку в каждой строке, а его ячейки в соседних строках должны быть соединены либо вертикально, либо по диагонали. Можете ли вы найти алгоритм для решения этой задачи без оценки каждой перестановки?

Ответ №1:

Я предполагаю, что «оптимальный путь» определяется как путь с наибольшей суммой?

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

 solution[i][j] = grid[i][j]   max(solution[i-1][j], solution[i-1][j-1], solution[i-1][j 1]) 
  

принимая во внимание граничные условия, конечно. Начальные условия были бы:

 solution[0][j] = grid[0][j]
  

Вам также необходимо отслеживать фактический пройденный путь (какие элементы сетки выбраны) по оптимальному пути. Как только вы доберетесь до последней строки, пройдите по строке и найдите максимальное значение. Это даст вам оптимальный путь, а также его значение.