Auf einer Zahlenlinie der Länge M
haben 0 < M <= 1,000,000,000
Sie N
( 1 < N <= 100,000
) ganzzahlige Punktepaare angegeben. In jedem Paar repräsentiert der erste Punkt, wo sich ein Objekt gerade befindet, und der zweite Punkt repräsentiert, wo ein Objekt bewegt werden soll. (Beachten Sie, dass der second
Punkt möglicherweise kleiner als der ist first
).
Angenommen, Sie beginnen an der Stelle 0
und haben einen Wagen, der 1
Objekte aufnehmen kann. Sie möchten alle Objekte von ihren Anfangspositionen zu ihren jeweiligen Endpositionen verschieben, während Sie die geringste Strecke entlang der Zahlenlinie zurücklegen ( keine Verschiebung). Sie müssen auf den Punkt kommen M
.
Jetzt habe ich versucht, dieses Problem auf ein einfacheres Problem zu reduzieren. Um ehrlich zu sein, kann ich mir nicht einmal eine Brute-Force- Lösung ( möglicherweise gierig) vorstellen. Mein erster Gedanke war jedoch, eine Rückwärtsbewegung in zwei Vorwärtsbewegungen zu degenerieren, aber das scheint nicht in allen Fällen zu funktionieren.
Ich habe diese 3
Beispieltestfälle hier herausgezogen:
Die Antwort auf den ersten Testfall lautet 12
. Zuerst holen Sie den red
Gegenstand an der Stelle ab 0
. Dann bewegen Sie sich zum Punkt 6
(Entfernung = 6
), lassen den red
Gegenstand vorübergehend fallen und nehmen den green
Gegenstand auf. Dann bewegen Sie sich zum Punkt 5
(Abstand = 1
) und lassen den green
Gegenstand fallen. Dann gehen Sie zurück zu Punkt 6
(Entfernung = 1
) und nehmen den red
Gegenstand auf, den Sie fallen gelassen haben. Gehen Sie zu Punkt 9 (Entfernung = 3
) und dann zu Punkt 10
(Entfernung = 1
), um die Sequenz zu beenden.
Die zurückgelegte Gesamtstrecke war 6 + 1 + 1 + 3 + 1 = 12
die minimal mögliche Entfernung.
Die beiden anderen Fälle haben Antworten auf 12
, glaube ich. Ich kann jedoch keine allgemeine Regel finden, um das Problem zu lösen.
Hat jemand irgendwelche Ideen?