알고리즘/문제 풀이

11051번: 이항 계수 2

Themion 2022. 1. 4. 10:40

https://www.acmicpc.net/problem/11051

 

11051번: 이항 계수 2

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

파스칼의 삼각형 법칙에 따라 이항계수 nCk는 k가 0 혹은 n일 때 1, 그 외의 경우에는 (n - 1)C(k - 1) + (n - 1)Ck이다.

#include <cstdio>

#define MAX_N 1000
#define MOD 10007

int main() {
    // N, K: 이항계수 상수
    int N, K;
    // ans[n][k]: 이항계수 nCk
    short ans[2][MAX_N + 1] = {{ 0, }};

    // 문제의 조건을 입력받은 뒤 파스칼의 삼각형을 이용해 이항 계수를 계산
    scanf("%d %d", &N, &K);
    for (int n = 1; n <= N; n++) {
        ans[n % 2][0] = ans[n % 2][n] = 1;
        for (int k = 1; k < n; k++)
            ans[n % 2][k] = (ans[!(n % 2)][k] + ans[!(n % 2)][k - 1]) % MOD;
    }

    // 이항계수를 출력
    printf("%hd\n", ans[N % 2][K]);

    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

11053번: 가장 긴 증가하는 부분 수열  (0) 2022.01.04
11052번: 카드 구매하기  (0) 2022.01.04
11050번: 이항 계수 1  (0) 2022.01.04
11047번: 동전 0  (0) 2022.01.04
11022번: A+B - 8  (0) 2022.01.03