article thumbnail image
Published 2021. 11. 7. 18:49

문제 설명

문제 링크

http://icpc.me/1010

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

풀이

조합을 이용하여 풀 수 있다.

고등학교 때 확통 공부를 해봤다면 아주 자주 볼 수 있는 문제다. 다리가 겹치지 않아야 하기 때문에 오른쪽의 어떤 다리에 연결할지만 정한다면, 왼쪽 다리가 어느 다리랑 연결될지는 알아서 결정이 되게 된다. 그렇기 때문에 mCn을 하면 된다.

코드

#include <cstdio>

int dp[32][32];

int dpf(int n, int k) {
    int &ret = dp[n][k];
    if (n == 1 || k == 0 || n == k) return 1;
    if (k == 1) return n;
    if (ret) return ret;
    return ret = dpf(n - 1, k - 1) + dpf(n - 1, k);
}

int main() {
    int t; scanf("%d", &t);
    while (t--) {
        int n, m; scanf("%d %d", &n, &m);
        printf("%d\n", dpf(m, n));
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[1043] 거짓말  (0) 2021.11.08
백준[6549] 히스토그램에서 가장 큰 정사각형  (0) 2021.11.07
백준[10999] 구간 합 구하기 2  (0) 2021.11.05
백준[1182] 부분수열의 합  (0) 2021.11.05
백준[5052] 전화번호 목록  (0) 2021.11.04
복사했습니다!