์๊ณ ๋ฆฌ์ฆ/DP
[๋ฐฑ์ค 1351 ๐ฅ] ๋ฌดํ ์์ด
1eehyunji
2023. 8. 21. 22:33
https://www.acmicpc.net/problem/1351
1351๋ฒ: ๋ฌดํ ์์ด
์ฒซ์งธ ์ค์ 3๊ฐ์ ์ ์ N, P, Q๊ฐ ์ฃผ์ด์ง๋ค.
www.acmicpc.net
๋ฌธ์
๋ฌดํ ์์ด A๋ ๋ค์๊ณผ ๊ฐ๋ค.
- A0 = 1
- Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1)
N, P์ Q๊ฐ ์ฃผ์ด์ง ๋, AN์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 3๊ฐ์ ์ ์ N, P, Q๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ AN์ ์ถ๋ ฅํ๋ค.
์ ํ
- 0 ≤ N ≤ 1012
- 2 ≤ P, Q ≤ 109

๋ฌธ์ ํ์ด
import sys
n,p,q=map(int, sys.stdin.readline().split(' '))
# A=[0]*(n+1)
# A[0]=1
# for i in range(1,n+1):
# A[i]=A[i//p]+A[i//q]
A={}
A[0]=1
def recursion_find_An(num):
if num in A.keys():
return A[num]
A[num]=recursion_find_An(num//p)+recursion_find_An(num//q)
return A[num]
recursion_find_An(n)
print(A[n])
- ๋จ์ํ A[n]์ ๊ตฌํ ๋๊น์ง ์ด์ ๊ฐ์ ๋ชจ๋ ๊ณ์ฐํ๋ ๊ฒ์ ๋น์ฐํ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.(n์ด ์ต๋ 10^12..)
- ๊ทธ๋์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํด์ n ์ด์ ์ ๋ชจ๋ ์๋ฅผ ๊ตฌํ์ง ์๊ณ , A[n]์ ๊ตฌํ๋ ๋ฐ์ ํ์ํ ์๋ค๋ง ๊ตฌํด์ ์ต์ข ์ ์ผ๋ก A[n]์ ๊ตฌํด์ผ ํ๋ค.
- ์ฌ๊ธฐ์ A๋ผ๋ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด์, ํด๋น ์๊ฐ ๋์ ๋๋ฆฌ์ key์ ์กด์ฌํ ๊ฒฝ์ฐ, ์ฆ, ํด๋น ์์ A๊ฐ์ด ๊ณ์ฐ๋์ด ์์ ๋๊น์ง ์ฌ๊ทํจ์๋ฅผ ํ๊ณ ๋ค์ด๊ฐ์ ๊ฐ์ ์ฐพ๋๋ค.
- ๋ฌธ์ ์ ์์ 1๋ฒ์ผ๋ก ์ด ๊ณผ์ ์ ์ค๋ช ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.