본문 바로가기
백준

[백준 11051] 이항 계수 2, C++

by 황인태(intaehwang) 2020. 3. 8.
반응형

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

 

11051번: 이항 계수 2

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

www.acmicpc.net

본 문제는 이항 계수의 성질을 이용하여 푸는 문제다. 이항 계수는 (n, k) = (n-1, k) + (n-1, k-1)의 식이 성립하고, (n, 0) = 1, (i, i) = 1 (단, 1 <= i <= n) 이 성립한다. 따라서 d[n][k] = d[n-1][k] + d[n-1][k-1]의 점화식을 정의할 수 있고 mod 연산의 결과를 출력해야 하기 때문에 d[n][k] = ( ( d[n-1][k]%mod ) + ( d[n-1][k-1]%mod ) ) 으로 정의하여 문제를 해결할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdio>
 
using namespace std;
 
int d[1001][1001];
 
int const md = 10007;
 
int main() {
    int n, k;
    scanf("%d %d"&n, &k);
    for (int i = 0; i <= n; i++) {
        d[i][0= 1;
    }
    for (int i = 0; i <= k; i++) {
        d[i][i] = 1;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) {
            d[i][j] = ((d[i-1][j]%md) + (d[i-1][j-1]%md))%md;
        }
    }
    printf("%d\n", d[n][k]);
}
cs
반응형

'백준' 카테고리의 다른 글

[백준 16234] 인구 이동, C++  (0) 2020.03.10
[백준 1525] 퍼즐, C++  (0) 2020.03.09
[백준 12358] 시험 감독, C++  (0) 2020.03.03
[백준 1038] 감소하는 수, C++  (0) 2020.03.02
[백준 15684] 사다리 조작, C++  (0) 2020.03.02
Buy me a coffeeBuy me a coffee

댓글