>백엔드 개발 >C++ >K레벨에서 C++로 작성하여 N레벨의 최대 파워로 A레벨 보스를 물리치고 파워를 B만큼 증가시킵니다.

K레벨에서 C++로 작성하여 N레벨의 최대 파워로 A레벨 보스를 물리치고 파워를 B만큼 증가시킵니다.

王林
王林앞으로
2023-09-14 14:05:08701검색

K레벨에서 C++로 작성하여 N레벨의 최대 파워로 A레벨 보스를 물리치고 파워를 B만큼 증가시킵니다.

게임 개발 세계에서 플레이어 능력과 진행 상황을 최적화하는 것은 매력적이고 도전적인 경험을 만드는 데 중요한 측면입니다. 일반적인 메커니즘에는 다양한 레벨의 보스를 물리치는 것이 포함되며, 승리할 때마다 플레이어의 힘이 증가합니다. 이 기사에서는 레벨 A[i]]에서 보스를 물리치고 얻은 파워 증가분 B[i]]를 고려하여 초기 파워 레벨 K를 고려하여 플레이어가 N 레벨에서 달성할 수 있는 최대 파워를 계산하는 방법을 살펴보겠습니다. 구문과 알고리즘을 자세히 살펴보고 C++에서 실행 가능한 완전한 코드 예제를 사용하여 두 가지 서로 다른 접근 방식을 보여 드리겠습니다.

Grammar

이 주제를 더 자세히 살펴보기 전에. 다가오는 코드 그림에서 선택한 방법을 사용하는 것과 관련된 구문을 간략하게 설명하고 명확하게 해야 합니다. 일단 이러한 기반이 확립되면 우리는 이 특정 기술에 대한 보다 완전한 이해를 발전시킬 수 있습니다. -

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

Algorithm

N 레벨에서 달성 가능한 최대 전력을 결정하기 위해 다음과 같은 단계별 알고리즘을 따를 수 있습니다. −

  • 변수 maxPower를 초기화하여 획득한 최대 전력을 저장합니다.

  • 가변 currentPower를 초기 전력 레벨 K로 설정합니다.

  • 각 레벨 i를 0에서 N-1까지 반복 −

  • 레벨 A[i]에서 보스를 처치하면 B[i]의 전력 증가가 발생하는 경우 B[i] currentPower를 추가하여 업데이트합니다. .

  • 현재 전력이 최대 전력보다 큰지 확인하세요. 그렇다면 maxPower를 새 값으로 업데이트하세요.

  • maxPower를 N 레벨에서 달성 가능한 최대 전력으로 반환합니다.

방법 1: 동적 프로그래밍

이 문제에 대한 가능한 해결책은 동적 프로그래밍을 활용하는 것입니다. 각 수준에 대해 달성 가능한 최대 전력을 효율적으로 저장하려면 크기가 N+1인 dp라는 배열을 초기화합니다.

Example

#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;
}

Output

Maximum power achievable: 22

Explanation

이 접근 방식에서는 동적 프로그래밍을 활용하여 N 레벨에서 달성 가능한 최대 전력을 계산합니다. 각 레벨에서 달성할 수 있는 최대 전력을 저장하기 위해 N+1 크기의 dp 배열을 만듭니다. 먼저 동적 프로그래밍 배열 dp[0]은 초기 전력 수준을 나타내는 K 값으로 시작합니다. 계속해서 1부터 N까지의 각 i 번째 레벨에 대한 방법은 이 배열을 다음과 같이 업데이트하는 것과 관련됩니다. 이전 레벨에서 선장을 물리친 후 얻을 수 있는 최대 전력을 검색하여 메모리에 저장합니다. A[j] 위치에 있는 보스는 누군가의 힘을 B[j]만큼 증가시키는 것을 올바르게 유발합니다(여기서 j는 0에서 i-1까지의 값에 걸쳐 있음). max(dp[i - A[j]] + B [j],dp [i])를 사용합니다. 이전 최대 강도가 ​​현재 결과에 반영되도록 dp[i] 값을 업데이트할 수 있습니다. 마지막으로 N 레벨 중에서 얻을 수 있는 최대 전력으로 dp[N]을 반환합니다. 중첩 루프로 인해 이 방법의 시간 복잡도는 O(N^2)입니다.

방법 2: 그리디 알고리즘 사용

그리디 알고리즘을 사용하면 효율적인 솔루션을 제공할 수 있습니다. 이를 위해서는 보스 레벨 A[i]를 높여 레벨을 정렬한 다음 게임의 각 단계를 반복하고 특정 보스를 물리치는 데 도움이 될 때만 파워를 증가시켜 올바른 의사 결정을 내리는 연습이 필요합니다.

Example

#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;
}

Output

Maximum power achievable: 31

Explanation

그리디 알고리즘 접근 방식에서는 먼저 보스 레벨 A[i]의 오름차순에 따라 레벨을 정렬합니다. 그런 다음 각 레벨을 1부터 N까지 반복합니다. 현재 전력 수준을 추적하기 위해 currentPower 변수를 유지하고, 지금까지 달성한 ​​최대 전력을 저장하기 위해 maxPower 변수를 유지합니다. 초기 능력치 K부터 현재 레벨의 보스를 처치하면 능력치가 상승하는지 확인합니다. 그렇다면 전력 증분 B[i]를 추가하여 currentPower를 업데이트합니다. 현재 레벨까지의 모든 보스를 물리칠 때까지 이 과정을 계속합니다. currentPower가 maxPower를 초과할 때마다 maxPower를 업데이트합니다. 반복이 끝나면 maxPower에는 N 레벨 중에서 달성 가능한 최대 전력이 포함됩니다. 정렬 작업으로 인해 이 접근 방식의 시간 복잡도는 O(N log N)입니다.

결론

저희 기사에서는 원시 에너지 레벨 K에서 시작하여 스테이지별 보스를 물리친 후 증분 에너지 보상을 얻는 등 Tier N에서 달성할 수 있는 최대 전력을 결정하는 방법에 대해 논의했습니다. 우리는 동적 프로그래밍을 사용하거나 그리디 알고리즘을 사용하는 두 가지 옵션을 제안합니다.

두 가지 방법 모두 실행 가능한 결과를 생성하지만 구현에는 미묘한 차이가 있습니다. C++ 프로그래밍을 통해 이러한 기술을 배우고 이를 게임 개발에 통합하는 개발자는 풍부한 보상으로 가득 찬 게임 경험에 사용자를 참여시키는 만족스러운 진행 시스템을 구축하게 됩니다.

위 내용은 K레벨에서 C++로 작성하여 N레벨의 최대 파워로 A레벨 보스를 물리치고 파워를 B만큼 증가시킵니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

관련 기사

더보기