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