๐ณ ๋งํฌ
๐ ๋ฌธ์
์ฌ์์ด๋ ํ ๋์์ ์์ฅ์ด ๋์๋ค. ์ด ๋์์๋ ๋์๋ฅผ ๋์ชฝ๊ณผ ์์ชฝ์ผ๋ก ๋๋๋ ํฐ ๊ฐ์ด ํ๋ฅด๊ณ ์๋ค. ํ์ง๋ง ์ฌ์์ด๋ ๋ค๋ฆฌ๊ฐ ์์ด์ ์๋ฏผ๋ค์ด ๊ฐ์ ๊ฑด๋๋๋ฐ ํฐ ๋ถํธ์ ๊ฒช๊ณ ์์์ ์๊ณ ๋ค๋ฆฌ๋ฅผ ์ง๊ธฐ๋ก ๊ฒฐ์ฌํ์๋ค. ๊ฐ ์ฃผ๋ณ์์ ๋ค๋ฆฌ๋ฅผ ์ง๊ธฐ์ ์ ํฉํ ๊ณณ์ ์ฌ์ดํธ๋ผ๊ณ ํ๋ค. ์ฌ์์ด๋ ๊ฐ ์ฃผ๋ณ์ ๋ฉด๋ฐํ ์กฐ์ฌํด ๋ณธ ๊ฒฐ๊ณผ ๊ฐ์ ์์ชฝ์๋ N๊ฐ์ ์ฌ์ดํธ๊ฐ ์๊ณ ๋์ชฝ์๋ M๊ฐ์ ์ฌ์ดํธ๊ฐ ์๋ค๋ ๊ฒ์ ์์๋ค. (N โค M)
์ฌ์์ด๋ ์์ชฝ์ ์ฌ์ดํธ์ ๋์ชฝ์ ์ฌ์ดํธ๋ฅผ ๋ค๋ฆฌ๋ก ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค. (์ด๋ ํ ์ฌ์ดํธ์๋ ์ต๋ ํ ๊ฐ์ ๋ค๋ฆฌ๋ง ์ฐ๊ฒฐ๋ ์ ์๋ค.) ์ฌ์์ด๋ ๋ค๋ฆฌ๋ฅผ ์ต๋ํ ๋ง์ด ์ง์ผ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ์ฌ์ดํธ ๊ฐ์๋งํผ (N๊ฐ) ๋ค๋ฆฌ๋ฅผ ์ง์ผ๋ ค๊ณ ํ๋ค. ๋ค๋ฆฌ๋ผ๋ฆฌ๋ ์๋ก ๊ฒน์ณ์ง ์ ์๋ค๊ณ ํ ๋ ๋ค๋ฆฌ๋ฅผ ์ง์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
๐พ ํ์ด ๋ฐฉ๋ฒ
์์ชฝ ์ฒซ๋ฒ์งธ ์ฌ์ดํธ๊ฐ ๋์ชฝ์ ์ฌ์ดํธ๋ฅผ ๊ฒฐ์ ํ๋ฉด, ๋๋จธ์ง๋ ๋์ชฝ์ ๋จ์ ์ฌ์ดํธ๋ค ์ค ์์ชฝ์ ๋จ์ ์ฌ์ดํธ๋ค๋งํผ์ ์กฐํฉํ์ฌ ๊ฒฐ์ ๋๋ค.
์ฆ, nCm
๊ณผ ๊ฐ์ ์กฐํฉ์ด ์ฌ์ฉ๋๋ค.
ํ์ง๋ง ์ด ๋ฌธ์ ๋ dp๋ฅผ ์ด์ฉํด์ผ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์,nCm = n-1Cm + n-1Cm-1
์ ์ด์ฉํด์ dp๋ผ๋ ๋์
๋๋ฆฌ์ ๊ฐ์ ์ ์ฅํ๊ณ , ์
๋ฐ์ดํธ ์์ผ์ฃผ๋ฉฐ ํ ์ ์๋ค.
์ด๋ ๋์
๋๋ฆฌ์ ํค๊ฐ์ n,m ์ ํด๋นํ๋ ํํ ๊ฐ์ผ๋ก ๋์ด์๊ณ , return ์กฐ๊ฑด์ n์ด๋ m์ด 0์ด๊ฑฐ๋ n๊ณผ m์ด ๊ฐ์ ๋ 1์ ๋ฆฌํดํ๋ค.
solution ์ฝ๋
import sys
sys.stdin = open("input.txt")
sys.setrecursionlimit(10 ** 7)
T = int(sys.stdin.readline())
dp = {}
def combi(n,m):
if (n,m) in dp.keys():
return dp[(n,m)]
if n == 0 or m == 0 or n == m:
dp[(n,m)] = 1
return 1
res = combi(n-1,m-1) + combi(n-1,m)
dp[(n,m)] = res
return res
for _ in range(T):
n,m = map(int, sys.stdin.readline().split())
sys.stdout.write(str(combi(m,n))+"\n")