문제 링크 : https://www.acmicpc.net/problem/1010
문제설명
1. 서쪽 과 동쪽의 사이트 수가 주어지고 이때 서쪽과 동쪽을 잇는 다리를 건설할수 있는 경우의 수를 출력.
2. 사이트: 다리 짓기 적합한 장소 , 다리는 서로 겹쳐서 건설 불가.
알고리즘
1. 다리가 서로 겹처서 건설이 불가하고 N<= M 이므로 mCn 을 구하면 되는문제이다.
2. 이때 n,m<=30 이므로 조합의 수를 계산할때 mCn = mC(m-n) 을 활용 해야함.
코드
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 | #include<iostream> using namespace std; long long func(int n, int m) { long long a=1, b=1; int num = m; for (int i = 2; i <= n; i++) { b *= i; } for (int i = 0; i < n; i++) { a = a * num; num--; } return a / b; } int main() { cin.tie(NULL); ios::sync_with_stdio(false); int T, N, M; cin >> T; for (int i = 0; i < T; i++) { cin >> N >> M; if (N * 2 < M) { cout << func(N, M); } else { cout << func(M - N, M); } cout << '\n'; } } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 11403번: 경로 찾기 (0) | 2020.04.29 |
---|---|
백준 11559번: Puyo Puyo (0) | 2020.04.27 |
백준 1520번: 내리막길 (0) | 2020.04.26 |
백준 2146번 : 다리 만들기 (0) | 2020.04.26 |
백준 10986 번 : 나머지 합 (0) | 2020.04.20 |