在length为的数字行上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
(distance = 1
)并拾取放置的red
项目,移至点9(distance = 3
),然后移至点10
(distance = 1
)以完成序列。
行驶的总距离为6 + 1 + 1 + 3 + 1 = 12
,这是最小的可能距离。
12
我相信其他两种情况的答案是。但是,我找不到解决该问题的一般规则。
任何人有任何想法吗?