반응형
https://www.acmicpc.net/problem/11051
본 문제는 이항 계수의 성질을 이용하여 푸는 문제다. 이항 계수는 (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 |
댓글