Heim > Backend-Entwicklung > PHP-Tutorial > Maximale Punktzahl mit Kosten

Maximale Punktzahl mit Kosten

WBOY
Freigeben: 2024-08-18 06:46:02
Original
1000 Leute haben es durchsucht

1937. Maximale Punktzahl mit Kosten

Schwierigkeit:Mittel

Themen:Array, dynamische Programmierung

Sie erhalten m x n ganzzahlige Matrixpunkte (0-indiziert). Beginnend mit 0 Punkten möchten Sie die Anzahl der Punkte, die Sie aus der Matrix erhalten können, maximieren.

Um Punkte zu sammeln, müssen Sie in jeder Zeile eine Zelle auswählen. Wenn Sie die Zelle bei den Koordinaten (r, c) auswählen, werden Punkte[r][c] zu Ihrer Punktzahl hinzugefügt.

Sie verlieren jedoch Punkte, wenn Sie eine Zelle auswählen, die zu weit von der Zelle entfernt ist, die Sie in der vorherigen Zeile ausgewählt haben. Für alle zwei benachbarten Zeilen r und r + 1 (wobei 0 <= r < m - 1) Zellen an den Koordinaten (r, c

1) und (r + 1, c auswählen 2) subtrahiert abs(c1 - c2) von Ihrer Punktzahl.

Geben Sie

die maximale Anzahl an Punkten zurück, die Sie erreichen können.

abs(x) ist definiert als:

    x für x >= 0.
  • -x für x < 0.

Beispiel 1:

Maximum Number of Points with Cost

  • Eingabe: l1 = [2,4,3], l2 = [5,6,4]
  • Ausgabe: 9
  • Erklärung:
      Die blauen Zellen stellen die optimal auszuwählenden Zellen dar, die die Koordinaten (0, 2), (1, 1) und (2, 0) haben.
    • Sie addieren 3 + 5 + 3 = 11 zu Ihrer Punktzahl.
    • Sie müssen jedoch abs(2 - 1) + abs(1 - 0) = 2 von Ihrer Punktzahl abziehen.
    • Ihr Endergebnis ist 11 - 2 = 9.

Beispiel 2:

Maximum Number of Points with Cost

  • Eingabe: Punkte = [[1,5],[2,3],[4,2]]
  • Ausgabe: 11
  • Erklärung:
      Die blauen Zellen stellen die optimal auszuwählenden Zellen dar, die die Koordinaten (0, 1), (1, 1) und (2, 0) haben.
    • Sie addieren 5 + 3 + 4 = 12 zu Ihrer Punktzahl.
    • Sie müssen jedoch abs(1 - 1) + abs(1 - 0) = 1 von Ihrer Punktzahl abziehen.
    • Ihr Endergebnis ist 12 - 1 = 11.

Einschränkungen:

    m == Punkte.Länge
  • n == Punkte[r].Länge
  • 1 <= m, n <= 10
  • 5
  • 1 <= m * n <= 10
  • 5
  • 0 <= Punkte[r][c] <= 10
  • 5

Hinweis:

    Versuchen Sie es mit dynamischer Programmierung.
  1. dp[i][j] ist die maximale Anzahl von Punkten, die Sie haben können, wenn Punkte[i][j] die zuletzt ausgewählte Zelle ist.

Lösung:

Wir können die Lösung in mehrere Schritte unterteilen:

Schritt 1: Definieren Sie das DP-Array

Wir verwenden ein 2D-Array dp, wobei dp[i][j] die maximale Punktzahl darstellt, die wir durch Auswahl der Zelle in Zeile i und Spalte j erreichen können.

Schritt 2: Initialisieren Sie das DP-Array

Initialisieren Sie die erste Reihe von dp so, dass sie mit der ersten Reihe von Punkten übereinstimmt, da es keine vorherigen Reihen gibt, um die Kosten zu subtrahieren.

Schritt 3: Berechnen Sie die DP-Werte für jede Zeile

Für jede weitere Zeile berechnen wir die maximal möglichen Punkte für jede Spalte unter Berücksichtigung der Kosten für den Wechsel von der vorherigen Zeile.

Um den Übergang von Zeile i-1 zu Zeile i effizient zu berechnen, können wir links und rechts zwei Hilfsarrays verwenden:

    left[j] speichert den Maximalwert, den wir für die j-te Spalte erreichen können, wobei nur Übergänge von links berücksichtigt werden.
  • right[j] speichert den Maximalwert, den wir für die j-te Spalte erreichen können, wobei nur Übergänge von rechts berücksichtigt werden.
Schritt 4: DP für jede Zeile aktualisieren

Für jede Spalte j in Zeile i:

    Aktualisieren Sie dp[i][j] mit dem Maximum von links[j] oder rechts[j] plus Punkten[i][j].
Schritt 5: Geben Sie den Maximalwert aus der letzten Zeile zurück

Das Ergebnis ist der Maximalwert in der letzten Zeile des dp-Arrays.

Lassen Sie uns diese Lösung in PHP implementieren:

1937. Maximale Punktzahl mit Kosten



  
  
  Erläuterung:

  • linke und rechte Arrays: Diese helfen uns bei der Berechnung der maximalen Punkte, die wir für jede Zelle gewinnen können, indem wir die Werte der vorherigen Zeile berücksichtigen und so den Nachteil effizient berücksichtigen, der durch das Verschieben über Spalten hinweg entsteht.
  • Dynamischer Programmieransatz:Diese Methode stellt sicher, dass jede Zeile auf der Grundlage der vorherigen Zeile berechnet wird, wodurch die Lösung für große Matrizen skalierbar wird.
Dieser Ansatz hat eine zeitliche Komplexität von (O(m mal n)), was angesichts der Einschränkungen effizient ist.

Kontaktlinks

Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!

Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:

  • LinkedIn
  • GitHub

Das obige ist der detaillierte Inhalt vonMaximale Punktzahl mit Kosten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage