์ค๋ฒ4 : ๋ฉ๋ชจ์ด์ ์ด์ ๋ฌธ์ ์ด๋ค.
์๊ฐ
๊ณ ๋ฑํ๊ต ๋ ๋ง์ด ํ์ด๋ณธ ํจ์์ ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๊ฐ๋ค. ๊ฒฐ๊ตญ์ ๊ณต์ญ๋จ์์ N๊ฐ์ site๋ฅผ ๊ณ ๋ฅด๊ฒ ๋๋ฉด ์๋์ผ๋ก ์์๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค. M๊ฐ์ ์์ ์ค์ N๊ฐ์ ์์๋ฅผ ๊ณ ๋ฅด๋ฉด ๋๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ฒฐ๊ตญ ์กฐํฉ์ ๊ตฌํํ๋ ๋ฌธ์ ์ ๊ฐ๋ค. ๊ทธ ๊ณผ์ ์์ ์ค๋ณต๋๋ ์กฐํฉ ๊ฐ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ก ์ ์ฅํ๊ฒ ๋๋ฉด ์๊ฐ์ด ๋งค์ฐ ๋ง์ด ๋จ์ถ๋๋ค.
Code
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
ll memo[31][31];
ll combination(int M, int N){
if (M == N || N == 0) return 1;
if (memo[M-1][N-1] == 0) memo[M-1][N-1] = combination(M-1, N-1);
if (memo[M-1][N] == 0) memo[M-1][N] = combination(M-1, N);
return memo[M-1][N-1] + memo[M-1][N];
}
int main(){
int T;
cin >> T;
for (int tc = 0; tc < T; tc++) {
int N, M;
cin >> N >> M;
cout << combination(M, N) << '\n';
}
}