ProblemSolving

[BOJ] 1354_무한 수열 2

ZzzzzL 2021. 3. 13. 19:58

무한 수열 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;
      }