Первый шаг в решении проблемы - понять, как пройти по матрице. На изображении ниже показано расстояние от начальной точки до друг друга.
Обратите внимание, что равноудаленные точки расположены по диагонали. Учитывая set
(назовите его A ), который представляет одну диагональ, точки на следующей диагонали (назовите его B ) находятся следующим образом:
for each point in set A
if the x coordinate is greater than zero
add (x-1, y) to set B
if the y coordinate is greater than zero
add (x, y-1) to set B
В этом примере наборы, представляющие диагонали, должны выглядеть следующим образом:
[(2, 2)] // starting position
[(1, 2), (2, 1)] // after 1 move
[(2, 0), (1, 1), (0, 2)] // after 2 moves
[(0, 1), (1, 0)] // after 3 moves
[(0, 0)] // after 4 moves
На изображении ниже показано, сколько разных путей можно использовать для достижения каждой точки в матрице. Количество путей совпадает с числами в треугольнике Pascal . Для целей этого вопроса единственное, что имеет значение, - это то, что числа быстро растут, поэтому нам нужно уменьшить количество.
Чтобы уменьшить количество путей, нам нужно отсеивать непродуктивные пути при обходе матрицы. Это достигается путем сравнения кортежей, каждый из которых состоит из еды и воды. Кортеж (F,W)
доминирует над кортежем (f,w)
iff F >= f
AND W >= w
.
Например, рассмотрим центральную позицию в матрице. Мы можем достичь этой точки либо перемещаясь вверх, затем влево, либо перемещаясь влево, затем вверх. Переход вверх, затем влево для урожайности (еда, вода) из (3,5), тогда как перемещение влево, затем вверх, для урожайности (3,6). (3,6) доминирует (3,5), поэтому нам нужно только рассмотреть (3,6). Итак, после двух ходов мы имеем ситуацию, показанную ниже. Обратите внимание, что у нас есть только 1 кортеж в центральной позиции, а не два, которые предсказал бы треугольник Pascal.
После трех ходов , мы имеем ситуацию, показанную ниже. У нас есть по два набора для каждой точки третьей диагонали. Это необходимо, потому что в одном из кортежей больше еды, а в другом больше воды, поэтому ни один из них не доминирует над другим.
После четырех ходов мы имеем четыре возможных ответа, и выбор лучшего - это простой вопрос сравнения min(food, water)
для каждого из кортежей.