입력
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
출력
첫째 줄에 AN을 출력한다.
#include<iostream>
#include<map>
#include<math.h>
using namespace std;
long long int N;
int P, Q;
//일반 배열로 dp처럼 풀기엔 10^12* 8 바이트 크기를 못 감당함
//하지만 map을 사용해 값을 넣어주는 식으로하면 실제 저장할 값이 몇 안되어서 풀기 가능하다
map<long long, long long> dp;
void Input() {
cin >> N >> P >> Q;
dp[0] = 1;
}
long long returnValueA(long long n) {
if (dp[n]) return dp[n];
long long devidedByP = returnValueA(n / P);
long long devidedByN = returnValueA(n / Q);
dp[n] = devidedByP + devidedByN;
return dp[n];
}
int main() {
ios_base::sync_with_stdio(0);
Input();
cout << returnValueA(N);
}
dp에서 갯수가 작다면 꼭 배열을 안쓰고 map쓰는게 효율적이라는 걸 배운 문제였다.
오늘 잔소리해대서 미안!!!!
히히 넌 늘 잘될거야 화이팅!!!!
빠샤빠샤 응원한당☺️