Module: Muster in der dynamischen Programmierung


Problem

5 /7


Theory Click to read/hide

Diskleimer: Das nachfolgend beschriebene Verfahren ist nicht universell, kann aber oft die Herausforderung erfüllen oder die richtige Lösung erreichen.

Wenn auf einer bestimmten Achse (in der Regel die Zeitachse oder die Indizes eines Bereichs) ein Zwischensatz vorhanden ist und einige von ihnen in der besten Weise ausgewählt werden müssen, dass sich die gewählten Schnittpunkte nicht schneiden, dann lohnt es sich, dynamische Programmierung anzuwenden.

Beispiel der Lösung:

Zunächst werden wir die vorhandenen Räume an der rechten Grenze sortieren. Lassen Sie uns die folgende Dynamik setzen: dp[i] - Antwort für die ersten i Intervalle.
Wir werden wie folgt lesen: Zuerst werden wir die Situation betrachten, dass der Raum nicht genutzt wird, dann nur dp[i] = dp[i-1]. Wir weisen darauf hin, dass dadurch sichergestellt wird, dass dp[i] Werte mit dem Wachstum i nicht überschritten werden. Und logisch, indem wir einen neuen Slot hinzufügen, können wir die globale Antwort nicht verschlechtern: entweder ignorieren wir einfach den neuen Slot oder wir können eine bessere Option mit ihm zu gestalten. Wenn wir nun den i-Abstand nutzen wollen, können wir diese Räume nutzen, deren rechte Grenzen kleiner sind als die linke Linie des aktuellen Raumes, weil wir eine Reihe von unerklärlichen Linien wählen müssen. Zu diesem Zweck haben wir ursprünglich die rechten Linienräume sortiert, so dass die notwendige Position nun effektiv erkannt werden kann. Dies kann analytisch, wenn möglich, aber im allgemeinen, ein Binpoisspalt gefunden werden, dessen rechte Grenze geringer ist als die linke Stromlinie und möglichst weit. Maximieren Sie die richtige Linie, wir wollen gierig sein, da die Höhe von i die Antwort nur erhöhen kann. Dementsprechend finden wir die notwendige p und zählen die dp[i] durch dp[p] und i-through.

Problem

Die Restauranz erhielt n Bestellungen für ein Bankett. Jede Bestellung zeichnet sich durch zwei Werte aus: das Datum des Beginns des Banketts lI und Endzeit rI (l)II)

Der Vorstand des Restaurants kann entweder die Bestellung annehmen oder ablehnen. Was ist die größte Anzahl von Bestellungen verfügbar?

Es können sich keine zwei angenommenen Aufträge kreuzen, d.h. es darf keine Zeit geben, die zu den beiden Kaufaufträgen gehört. Beginnt einer der Aufträge zu einem Zeitpunkt, zu dem die anderen Enden, können sie nicht gemeinsam angenommen werden.

Eingabe:
Die erste Zeile enthält eine ganze Anzahl von n (1 ≤ n 2,00000) - Anzahl der Bestellungen. Jede der folgenden n Zeilen hat ein paar ganze Zahlen lI, rI (0 ≤ lII≤ 10ANHANG)

Ausgangsdaten:
Nehmen Sie die größte Anzahl von Aufträgen, die akzeptiert werden können.

Beispiele:
EingangsdatenAusgangsdaten
2
7 11
4 7
1
5.
Artikel 2
Artikel 3
Artikel 4
5.
5 6
3
6
4 8
Artikel 1
4 7
Artikel 5
1 3
6 8
2