무한 수열 2

링크: https://www.acmicpc.net/problem/1354

 

1354번: 무한 수열 2

첫째 줄에 5개의 정수 N, P, Q, X, Y가 주어진다.

www.acmicpc.net

 

n을 기준으로 하여 dp 배열을 생성하게 되면, 10^13의 크기를 생성할 수 없다.
따라서, 배열로 dp문제를 해결할 수 없다.

 

map을 통해 필요한 index만 저장하고 꺼내서 사용하는 방식을 사용한다.

 

  • 정답 코드

      #include<iostream>
      #include<unordered_map>
      using namespace std;
      long long n, p, q, x, y;
      unordered_map<long long, long long> dp;
      long long An(long long i) {
          if (i <= 0)
              return 1;
    
          auto iter = dp.find(i);
          if (iter != dp.end())
              return iter->second;
    
          long long int a = An(i / p - x), b = An(i / q - y);
          dp[i] = a + b;
    
          return a + b;
      }
    
      int main() {
          cin >> n >> p >> q >> x >> y;
          cout << An(n);
          return 0;
      }

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1010_다리 놓기 재해결  (0) 2022.05.11
[BOJ] 1377_버블 소트  (0) 2021.03.14
[BOJ] 1644_소수의 연속합  (0) 2021.03.08
[BOJ] 1737_Pibonacci  (0) 2021.03.06
[BOJ] 1047_2로 몇 번 나누어질까  (0) 2021.03.05
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기