Heim  >  Artikel  >  Backend-Entwicklung  >  In C++ in Level K geschrieben, besiege den Level-A-Boss mit der maximalen Kraft von Level N und erhöhe die Kraft um B

In C++ in Level K geschrieben, besiege den Level-A-Boss mit der maximalen Kraft von Level N und erhöhe die Kraft um B

王林
王林nach vorne
2023-09-14 14:05:08623Durchsuche

In C++ in Level K geschrieben, besiege den Level-A-Boss mit der maximalen Kraft von Level N und erhöhe die Kraft um B

In der Welt der Spieleentwicklung ist die Optimierung der Fähigkeiten und des Fortschritts der Spieler ein wichtiger Aspekt bei der Schaffung ansprechender und herausfordernder Erlebnisse. Eine übliche Mechanik besteht darin, Bosse auf verschiedenen Ebenen zu besiegen, wobei jeder Sieg dem Spieler eine Kraftsteigerung beschert. In diesem Artikel werden wir untersuchen, wie man die maximale Kraft berechnet, die ein Spieler in N Leveln bei einem anfänglichen Powerlevel K erreichen kann, unter Berücksichtigung des Powerzuwachses B[i]], der durch das Besiegen eines Bosses auf Level A[i]] gewonnen wird. Wir werden uns mit der Syntax und den Algorithmen befassen und zwei verschiedene Ansätze anhand vollständiger ausführbarer Codebeispiele in C++ demonstrieren.

Grammatik

Bevor wir dieses Thema weiter untersuchen. In den kommenden Codeabbildungen müssen wir die Syntax für die Verwendung der gewählten Methode skizzieren und klären. Sobald diese Grundlage geschaffen ist, können wir ein umfassenderes Verständnis dieser spezifischen Technologie entwickeln. -

int calculateMaximumPower(int N, int K, int A[], int B[]);

Algorithmus

Um die maximal erreichbare Leistung in N Stufen zu bestimmen, können wir dem folgenden Schritt-für-Schritt-Algorithmus folgen: −

  • Initialisieren Sie eine Variable maxPower, um die maximal erhaltene Leistung zu speichern.

  • Stellen Sie die Variable currentPower auf die anfängliche Leistungsstufe K ein.

  • Iterieren Sie jedes Level, i, von 0 bis N-1 −

  • Wenn das Besiegen eines Bosses auf Level A[i] zu einem Leistungszuwachs von B[i] führt, aktualisieren Sie es durch Hinzufügen von B[i] aktueller Leistung .

  • Überprüfen Sie, ob die aktuelle Leistung größer als die maximale Leistung ist. Wenn ja, aktualisieren Sie maxPower mit dem neuen Wert.

  • MaxPower als maximal erreichbare Leistung in N-Stufen zurückgeben.

Methode 1: Dynamische Programmierung

Eine mögliche Lösung für dieses Problem ist die Verwendung dynamischer Programmierung. Um die maximal erreichbare Leistung für jede Ebene effizient zu speichern, initialisieren Sie ein Array mit dem Namen dp und der Größe N+1.

Beispiel

#include <iostream>
#include <algorithm>

int calculateMaximumPower(int N, int K, int A[], int B[]) {
   int dp[N + 1];
   dp[0] = K;

   for (int i = 1; i <= N; i++) {
      dp[i] = dp[i - 1];
      for (int j = 0; j < i; j++) {
         if (A[j] <= i)
            dp[i] = std::max(dp[i], dp[i - A[j]] + B[j]);
      }
   }

   return dp[N];
}

int main() {
   // Example usage
   int N = 5;
   int K = 10;
   int A[] = {2, 3, 1, 4, 2};
   int B[] = {5, 3, 2, 7, 4};

   int maxPower = calculateMaximumPower(N, K, A, B);
   
   std::cout << "Maximum power achievable: " << maxPower << std::endl;

   return 0;
}

Ausgabe

Maximum power achievable: 22

Erläuterung

Bei diesem Ansatz verwenden wir dynamische Programmierung, um die maximal erreichbare Leistung in N Ebenen zu berechnen. Wir erstellen ein Array dp der Größe N+1, um die maximal erreichbare Leistung auf jeder Ebene zu speichern. Zunächst beginnt unser dynamisches Programmierarray dp[0] mit dem K-Wert, der den anfänglichen Leistungspegel darstellt. Im weiteren Verlauf umfasst unsere Methode für jedes i-te Level von 1 bis hinauf zu N die Aktualisierung dieses Arrays wie folgt: Wir rufen die maximale Leistung ab, die nach dem Sieg über den Kapitän in einem früheren Level erhalten werden kann, und speichern sie im Speicher. Ein Boss an Position A[j] führt korrekt dazu, dass sich die Macht einer Person um B[j] erhöht (wobei j die Werte 0 bis i-1 umfasst). Durch die Verwendung von max(dp[i - A[j]] + B [j],dp [i]). Wir können den Wert von dp[i] aktualisieren, sodass seine vorherige maximale Intensität dem entspricht, was das aktuelle Ergebnis widerspiegelt. Schließlich geben wir dp[N] als die maximal erreichbare Leistung zwischen N Ebenen zurück. Aufgrund der verschachtelten Schleifen beträgt die zeitliche Komplexität dieser Methode O(N^2).

Methode 2: Verwenden Sie einen Greedy-Algorithmus.

Die Verwendung eines Greedy-Algorithmus kann eine effiziente Lösung darstellen. Dies erfordert das Üben einer guten Entscheidungsfindung, indem man die Level sortiert, indem man die Boss-Stufe A[i] erhöht, dann jede Phase des Spiels durchläuft und die Macht nur dann erhöht, wenn es dabei hilft, einen bestimmten Boss zu besiegen.

Beispiel

#include <iostream>
#include <algorithm>

bool compareLevels(std::pair<int, int> boss1, std::pair<int, int> boss2) {
   return boss1.first < boss2.first;
}

int calculateMaximumPower(int N, int K, int A[], int B[]) {
   std::pair<int, int> bosses[N];
   for (int i = 0; i < N; i++) {
      bosses[i] = std::make_pair(A[i], B[i]);
   }

   std::sort(bosses, bosses + N, compareLevels);

   int currentPower = K;
   int maxPower = K;
   int index = 0;

   for (int i = 1; i <= N; i++) {
      while (index < N && bosses[index].first <= i) {
         currentPower += bosses[index].second;
         index++;
      }

      maxPower = std::max(maxPower, currentPower);
   }
   return maxPower;
}

int main() {
   // Example usage
   int N = 5;
   int K = 10;
   int A[] = {2, 3, 1, 4, 2};
   int B[] = {5, 3, 2, 7, 4};

   int maxPower = calculateMaximumPower(N, K, A, B);

   std::cout << "Maximum power achievable: " << maxPower << std::endl;

   return 0;
}

Ausgabe

Maximum power achievable: 31

Erläuterung

Im Greedy-Algorithmus-Ansatz sortieren wir die Level zunächst nach der aufsteigenden Reihenfolge des Bosslevels A[i]. Dann durchlaufen wir jede Ebene von 1 bis N. Wir verwalten eine Variable „currentPower“, um den aktuellen Leistungspegel zu verfolgen, und eine Variable „maxPower“, um die bisher erreichte maximale Leistung zu speichern. Ausgehend von der anfänglichen Fähigkeitsstufe K prüfen wir, ob das Besiegen des Bosses der aktuellen Stufe die Fähigkeit erhöht. Wenn ja, aktualisieren wir currentPower, indem wir das Leistungsinkrement B[i] hinzufügen. Wir setzen diesen Prozess fort, bis alle Bosse bis zum aktuellen Level besiegt sind. Immer wenn currentPower maxPower überschreitet, aktualisieren wir maxPower. Am Ende der Iteration enthält maxPower die maximal erreichbare Leistung unter N Ebenen. Aufgrund der Sortieroperation beträgt die zeitliche Komplexität dieses Ansatzes O(N log N).

Fazit

In unserem Artikel ging es darum, wie man die in Stufe N erreichbare Spitzenleistung ermittelt – ausgehend von einem Rohenergieniveau K und dem Erhalt zunehmender Energiebelohnungen nach dem Besiegen stufenspezifischer Bosse. Wir schlagen zwei Optionen vor: Verwenden Sie dynamische Programmierung oder verwenden Sie einen gierigen Algorithmus.

Während beide Methoden praktikable Ergebnisse liefern, gibt es einige subtile Unterschiede in der Umsetzung. Entwickler, die diese Fähigkeiten erlernen und sie durch C++-Programmierung in die Spieleentwicklung integrieren, werden zufriedenstellende Fortschrittssysteme erstellen, die Benutzer in ein Spielerlebnis voller reichhaltiger Belohnungen einbeziehen.

Das obige ist der detaillierte Inhalt vonIn C++ in Level K geschrieben, besiege den Level-A-Boss mit der maximalen Kraft von Level N und erhöhe die Kraft um B. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen