На числовой линии длины M
, где 0 < M <= 1,000,000,000
вы задали N
( 1 < N <= 100,000
) целочисленные пары точек. В каждой паре первая точка указывает, где в данный момент находится объект, а вторая точка указывает, куда должен быть перемещен объект. (Имейте в виду, что second
точка может быть меньше, чем first
).
Теперь предположим, что вы начинаете с той точки, 0
и у вас есть корзина, в которой можно держать 1
объект. Вы хотите переместить все объекты из их начальных положений в их соответствующие конечные положения при перемещении наименьшего расстояния вдоль числовой линии ( не смещения). Вы должны в конечном итоге на точку M
.
Теперь я пытался свести эту проблему к более простой проблеме. Честно говоря, я даже не могу придумать решение о грубой силе ( возможно, жадной). Тем не менее, моя первая мысль состояла в том, чтобы выродить движение назад к двум движениям вперед, но, похоже, это работает не во всех случаях.
Я нарисовал эти 3
примеры тестов здесь:
Ответ на первый тестовый пример 12
. Сначала вы берете red
предмет в точку 0
. Затем вы перемещаетесь в точку 6
(расстояние = 6
), red
временно отбрасываете предмет, а затем подбираете green
предмет. Затем вы перемещаетесь в точку 5
(расстояние = 1
) и опускаете green
предмет. Затем вы возвращаетесь в точку 6
(расстояние = 1
) и поднимаете red
предмет, который вы уронили, перемещаетесь в точку 9 (расстояние = 3
), затем перемещаетесь в точку 10
(расстояние = 1
), чтобы завершить последовательность.
Общее пройденное расстояние было 6 + 1 + 1 + 3 + 1 = 12
минимально возможным.
В двух других случаях есть ответы 12
, я полагаю. Однако я не могу найти общее правило для его решения.
У кого-нибудь есть идеи?