長さの数直線上のM
、0 < M <= 1,000,000,000
指定した、N
(1 < N <= 100,000
点の対の整数)。各ペアで、最初のポイントはオブジェクトが現在配置されている場所を表し、2番目のポイントはオブジェクトを移動する必要がある場所を表します。(覚えておいてくださいsecond
ポイントがかもしれ小さいよりfirst
)。
ここで、その時点0
から始めて、1
オブジェクトを保持できるカートがあるとします。すべてのオブジェクトを最初の位置からそれぞれの最終位置に移動し、数直線に沿って(変位ではなく)最短距離を移動したいとします。あなたはポイントで終わる必要がありM
ます。
今、私はこの問題をより簡単な問題に削減しようとしています。正直なところ、私は力ずくの(おそらく貪欲な)解決策を考えることすらできません。しかし、私の最初の考えは、後方への動きを2つの前方への動きに縮退させることでしたが、それがすべての場合に機能するとは思われません。
私はこれらの3
サンプルテストケースをここに引き出しました:
最初のテストケースへの答えは12
です。まず、red
ポイントでアイテムを受け取ります0
。次に、ポイント6
(距離= 6
)に移動し、red
アイテムを一時的にドロップして、アイテムを拾いgreen
ます。次に、ポイント5
(距離= 1
)に移動してgreen
アイテムをドロップします。次に、ポイント6
(距離= 1
)に戻ってred
ドロップしたアイテムを拾い、ポイント9(距離= 3
)に移動してから、ポイント10
(距離= 1
)に移動してシーケンスを終了します。
移動した総距離はでした6 + 1 + 1 + 3 + 1 = 12
。これは可能な最小距離です。
他の2つのケースにはの答えがある12
と思います。しかし、私はそれを解決するための一般的なルールを見つけることができません。
誰かアイデアはありますか?