На числовой линии длины 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, я полагаю. Однако я не могу найти общее правило для его решения.
У кого-нибудь есть идеи?