Heim Backend-Entwicklung PHP-Tutorial . Mindestpreis für Tickets

. Mindestpreis für Tickets

Jan 01, 2025 am 08:28 AM

. Minimum Cost For Tickets

983. Mindestpreis für Tickets

Schwierigkeit:Mittel

Themen:Array, dynamische Programmierung

Sie haben ein Jahr im Voraus einige Zugreisen geplant. Die Tage des Jahres, in denen Sie reisen, werden als ganzzahlige Array-Tage angegeben. Jeder Tag ist eine Ganzzahl von 1 bis 365.

Bahntickets werden auf drei verschiedene Arten verkauft:

  • Ein 1-Tages- Pass wird für [0] Dollar verkauft,
  • Ein 7-Tagespass wird zum Preis von[1] Dollar verkauft und
  • Ein 30-Tagespass wird zum Preis von[2] Dollar verkauft.

Die Pässe ermöglichen so viele aufeinanderfolgende Reisetage.

  • Wenn wir beispielsweise am zweiten Tag einen 7-Tages- Pass erhalten, können wir 7 Tage lang reisen: 2, 3, 4, 5, 6, 7 und 8.

Geben Sie den Mindestbetrag an Dollar zurück, den Sie täglich für die Reise in der angegebenen Tagesliste benötigen.

Beispiel 1:

  • Eingabe: Tage = [1,4,6,7,8,20], Kosten = [2,7,15]
  • Ausgabe: 11
  • Erklärung: Hier ist beispielsweise eine Möglichkeit, Pässe zu kaufen, mit denen Sie Ihren Reiseplan umsetzen können:
    • Am ersten Tag haben Sie eine Tageskarte zum Preis von [0] = 2 $ gekauft, die den ersten Tag abdeckte.
    • Am 3. Tag haben Sie einen 7-Tage-Pass für die Kosten[1] = 7 $ gekauft, der die Tage 3, 4, ..., 9 abdeckt.
    • Am 20. Tag haben Sie zum Preis von [0] = 2 $ eine Tageskarte gekauft, die den 20. Tag abdeckte.
    • Insgesamt haben Sie 11 $ ausgegeben und alle Tage Ihrer Reise abgedeckt.

Beispiel 2:

  • Eingabe: Tage = [1,2,3,4,5,6,7,8,9,10,30,31], Kosten = [2,7,15]
  • Ausgabe: 17
  • Erklärung: Hier ist beispielsweise eine Möglichkeit, Pässe zu kaufen, mit denen Sie Ihren Reiseplan umsetzen können:
    • Am ersten Tag haben Sie einen 30-Tage-Pass für die Kosten[2] = 15 $ gekauft, der die Tage 1, 2, ..., 30 abdeckt.
    • Am 31. Tag haben Sie eine Tageskarte zum Preis von [0] = 2 $ gekauft, die den 31. Tag abdeckt.
    • Insgesamt haben Sie 17 $ ausgegeben und alle Tage Ihrer Reise abgedeckt.

Einschränkungen:

  • 1 <= Tage.Länge <= 365
  • 1 <= Tage[i] <= 365
  • Tage ist in streng aufsteigender Reihenfolge.
  • costs.length == 3
  • 1 <= Kosten[i] <= 1000

Lösung:

Das Problem besteht darin, die Mindestkosten für Reisen an bestimmten Tagen im Jahr zu ermitteln. Das Problem bietet drei Arten von Reisepässen: 1-Tages-, 7-Tages- und 30-Tages-Pässe, jeweils mit spezifischen Kosten. Ziel ist es, mit diesen Pässen die günstigste Möglichkeit zu finden, alle Reisetage abzudecken. Die Aufgabe erfordert die Verwendung dynamischer Programmierung, um die minimalen Kosten effizient zu berechnen.

Wichtige Punkte

  • Dynamische Programmierung (DP): Wir verwenden dynamische Programmierung, um die Mindestkosten für jeden Tag im Auge zu behalten.
  • Reisetage: Die Angabe der Reisetage erfolgt in streng aufsteigender Reihenfolge, sodass wir genau wissen, an welchen Tagen wir reisen müssen.
  • Drei Arten von Pässen: Berechnen Sie für jeden Tag d in der Tagesreihe die Mindestkosten, indem Sie die Kosten für den Kauf eines Passes berücksichtigen, der den aktuellen Tag d abdeckt:
    • 1-Tages-Pass: Die Kosten wären die Kosten für den 1-Tages-Pass (Kosten[0]), addiert zu den Kosten des Vortages (dp[i-1]).
    • 7-Tage-Pass: Die Kosten entsprechen den Kosten für den 7-Tage-Pass (Kosten[1]) zuzüglich der Kosten für den letzten Tag, der innerhalb von 7 Tagen vor dem Tag liegt.
    • 30-Tage-Pass: Die Kosten entsprechen den Kosten für den 30-Tage-Pass (Kosten[2]) zuzüglich der Kosten für den letzten Tag, der innerhalb von 30 Tagen vor dem Tag liegt.
  • Basisfall: Die Mindestkosten für einen Tag, an dem keine Reise stattfindet, betragen 0,

Ansatz

  1. DP-Array: Wir verwenden ein DP-Array dp[], wobei dp[i] die Mindestkosten darstellt, um alle Reisetage bis zum Tag i abzudecken.
  2. Füllen des DP-Arrays: Für jeden Tag von 1 bis 365:
    • Wenn der Tag ein Reisetag ist, berechnen wir die Mindestkosten unter Berücksichtigung von:
      • Die Kosten für die Nutzung einer Tageskarte.
      • Die Kosten für die Nutzung eines 7-Tage-Passes.
      • Die Kosten für die Nutzung eines 30-Tage-Passes.
    • Wenn der Tag kein Reisetag ist, sind die Kosten für diesen Tag die gleichen wie am Vortag (dp[i] = dp[i-1]).
  3. Endgültige Antwort: Nach dem Füllen des DP-Arrays werden die Mindestkosten in dp[365] gespeichert, was alle möglichen Reisetage abdeckt.

Planen

  1. Initialisieren Sie ein Array dp[] der Größe 366 (ein zusätzliches für die Verarbeitung bis Tag 365).
  2. Setzen Sie dp[0] auf 0, da für Tag 0 keine Kosten anfallen.
  3. Erstellen Sie eine Reihe von Reisetagen, um schnell zu überprüfen, ob ein bestimmter Tag ein Reisetag ist.
  4. Jeden Tag von 1 bis 365 durchlaufen:
    • Wenn es sich um einen Reisetag handelt, berechnen Sie die Mindestkosten unter Berücksichtigung der einzelnen Passtypen.
    • Wenn nicht, übertragen Sie die Kosten vom Vortag.
  5. Gibt den Wert bei dp[365] zurück.

Lassen Sie uns diese Lösung in PHP implementieren: 983. Mindestpreis für Tickets

<?php
/**
 * @param Integer[] $days
 * @param Integer[] $costs
 * @return Integer
 */
function mincostTickets($days, $costs) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
$days1 = [1, 4, 6, 7, 8, 20];
$costs1 = [2, 7, 15];
echo mincostTickets($days1, $costs1); // Output: 11

$days2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31];
$costs2 = [2, 7, 15];
echo mincostTickets($days2, $costs2); // Output: 17
?>




<h3>
  
  
  Erläuterung:
</h3>

<ul>
<li>Der Algorithmus iteriert über jeden Tag des Jahres (365 Tage).</li>
<li>Für jeden Reisetag werden die Kosten berechnet, indem geprüft wird, ob es günstiger ist:

<ul>
<li>Kaufen Sie eine 1-Tages-Karte (der Preis der 1-Tages-Karte wird zum Preis des Vortages addiert).</li>
<li>Kaufen Sie eine 7-Tages-Karte (zusätzlich zu den Kosten der 7-Tages-Karte und unter Berücksichtigung der Reisekosten der letzten 7 Tage).</li>
<li>Kaufen Sie eine 30-Tage-Karte (zusätzlich zu den Kosten der 30-Tage-Karte und unter Berücksichtigung der Reisekosten der letzten 30 Tage).</li>
</ul>


</li>

<li>Wenn es kein Reisetag ist, bleiben die Kosten die gleichen wie am Vortag.</li>

</ul>

<h3>
  
  
  Beispiel-Komplettlösung
</h3>

<h4>
  
  
  Beispiel 1:
</h4>

<p><strong>Eingabe:</strong><br>
</p>

<pre class="brush:php;toolbar:false">$days = [1, 4, 6, 7, 8, 20];
$costs = [2, 7, 15];
Nach dem Login kopieren
  • Tag 1: Kaufen Sie eine Tageskarte für 2 $.
  • Tag 4: Kaufen Sie einen 7-Tage-Pass für 7 $ (gilt für die Tage 4 bis 9).
  • Tag 20: Kaufen Sie eine weitere 1-Tages-Karte für 2 $.

Gesamtkosten = 2 $, 7 $, 2 $ = 11 $.

Beispiel 2:

Eingabe:

$days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31];
$costs = [2, 7, 15];
Nach dem Login kopieren
  • Tag 1: Kaufen Sie einen 30-Tage-Pass für 15 $ (gilt für die Tage 1 bis 30).
  • Tag 31: Kaufen Sie eine 1-Tages-Karte für 2 $.

Gesamtkosten = 15 $ 2 $ = 17 $.

Zeitkomplexität

Die zeitliche Komplexität der Lösung beträgt O(365), da wir alle Tage des Jahres durchlaufen und für jeden Tag konstante Zeitoperationen durchführen (Überprüfung der Reisetage und Aktualisierung des DP). Array). Somit läuft die Lösung in linearer Zeit relativ zur Anzahl der Tage.

Ausgabe zum Beispiel

Beispiel 1:

$days = [1, 4, 6, 7, 8, 20];
$costs = [2, 7, 15];
echo mincostTickets($days, $costs); // Output: 11
Nach dem Login kopieren

Beispiel 2:

$days = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31];
$costs = [2, 7, 15];
echo mincostTickets($days, $costs); // Output: 17
Nach dem Login kopieren

Die Lösung berechnet mithilfe dynamischer Programmierung effizient die Mindestkosten für die Deckung der Reisetage. Durch Iteration über die Tage und Berücksichtigung aller möglichen Pässe (1-Tages-, 7-Tages-, 30-Tages-Pässe) findet der Algorithmus die optimale Strategie für den Kauf der Pässe. Die zeitliche Komplexität ist in Bezug auf die Anzahl der Tage linear und eignet sich daher für die Problembeschränkungen.

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 von. Mindestpreis für Tickets. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Was sind Aufzählungen (Enums) in PHP 8.1? Was sind Aufzählungen (Enums) in PHP 8.1? Apr 03, 2025 am 12:05 AM

Die Aufzählungsfunktion in Php8.1 verbessert die Klarheit und Type des Codes, indem benannte Konstanten definiert werden. 1) Aufzählungen können Ganzzahlen, Zeichenfolgen oder Objekte sein, die die Lesbarkeit der Code und die Type der Type verbessern. 2) Die Aufzählung basiert auf der Klasse und unterstützt objektorientierte Merkmale wie Traversal und Reflexion. 3) Die Aufzählung kann zum Vergleich und zur Zuordnung verwendet werden, um die Sicherheit der Typ zu gewährleisten. 4) Aufzählung unterstützt das Hinzufügen von Methoden zur Implementierung einer komplexen Logik. 5) Strenge Typ Überprüfung und Fehlerbehandlung können häufig auftretende Fehler vermeiden. 6) Die Aufzählung verringert den magischen Wert und verbessert die Wartbarkeit, achten Sie jedoch auf die Leistungsoptimierung.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie debugge ich den CLI -Modus in PhpStorm? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

See all articles