1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> #include <map> using namespace std; long long dfs(long long num); long long p, q; map<long long, long long> mp; int main() { long long n; scanf("%lld %lld %lld", &n, &p, &q); long long rst = dfs(n); printf("%lld", rst); } long long dfs(long long num) { if (num == 0) return 1; long long l = num / p; long long r = num / q; long long lv, rv; if (mp.find(l) != mp.end()) lv = mp.find(l)->second; else { lv = dfs(l); mp.insert(make_pair(l, lv)); } if (mp.find(r) != mp.end()) rv = mp.find(r)->second; else { rv = dfs(r); mp.insert(make_pair(r, rv)); } return lv + rv; } | cs |
배열의 크기가 너무 커서 메모이제이션을 할 수 없을때 -> map stl 을 활용하자
'알고리즘 > DP' 카테고리의 다른 글
2240 자두나무 (0) | 2020.02.28 |
---|---|
7579 앱 (0) | 2020.02.28 |
2302 극장 좌석 (0) | 2020.02.28 |
11066 파일합치기 (0) | 2020.02.28 |
11052 카드 구매하기 (0) | 2020.02.27 |