这是我遇到的一个有趣的问题:
假设在长度为 的数轴上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
(distance = 1
) 并放下该green
项目。然后你回到点6
(distance = 1
) 并捡起red
你放下的物品,移动到点 9 (distance = 3
),然后移动到点10
(distance = 1
) 完成序列。
行驶的总距离为6 + 1 + 1 + 3 + 1 = 12
,这是可能的最小距离。
12
我相信其他两个案例的答案是。但是,我找不到解决它的一般规则。
有人有什么想法吗?