Auf einer Zahlenlinie der Länge Mhaben 0 < M <= 1,000,000,000Sie 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 secondPunkt möglicherweise kleiner als der ist first).
Angenommen, Sie beginnen an der Stelle 0und haben einen Wagen, der 1Objekte 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 3Beispieltestfälle hier herausgezogen:
Die Antwort auf den ersten Testfall lautet 12. Zuerst holen Sie den redGegenstand an der Stelle ab 0. Dann bewegen Sie sich zum Punkt 6(Entfernung = 6), lassen den redGegenstand vorübergehend fallen und nehmen den greenGegenstand auf. Dann bewegen Sie sich zum Punkt 5(Abstand = 1) und lassen den greenGegenstand fallen. Dann gehen Sie zurück zu Punkt 6(Entfernung = 1) und nehmen den redGegenstand 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 = 12die 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?