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을 사용한다.
728x90