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