PS

BOJ 1531 : 무한수열

lickelon 2024. 5. 19. 16:35
  • 문제 링크 : boj.kr/1531
  • 난이도 : G5
  • 태그 : DP, 맵

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

unordered_map<ll, ll> _m;
ll p, q;

ll dp(ll n) {
    if(_m.find(n) != _m.end())
        return _m[n];
    return _m[n] = (dp(n/p) + dp(n/q));
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    ll n;
    cin >> n >> p >> q;
    _m[0] = 1;
    cout << dp(n);

    return 0;
}

풀이

재귀적인 방식으로 DP문제를 해결하는 방식과 동일하게 해결할 수 있다. 단, 수의 범위가 크므로 메모이제이션에 배열이 아닌 map을 사용한다.

'PS' 카테고리의 다른 글

BOJ 23749 : 카드컨트롤  (0) 2024.05.21
BOJ 31858 : 간단한 순열 문제  (0) 2024.05.20
BOJ 29792 : 규칙적인 보스돌이  (0) 2024.05.18
BOJ 14370 : 전화번호 수수께끼 (Large)  (0) 2024.05.17
BOJ 23255 : 구름다리 2  (0) 2024.05.16