11051번 : 이항 계수 2
문제)
자연수 과 정수 가 주어졌을 때
![](https://blog.kakaocdn.net/dn/mEa1L/btstzuSe8T5/k3RXtz45Rf4SdGRflBUKSK/img.png)
를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 N과 K가 주어진다. (1 <= N <= 1.000. 0 <= K <= N)
출력 :
를 10,007로 나눈 나머지를 출력한다.
풀이)
나오는 규칙을 표로 그려보면
1 | 2 | 3 | 4 | 5 | |
1 | 1 | X | X | X | X |
2 | 2 | 1 | X | X | X |
3 | 3 | 3 | 1 | X | X |
4 | 4 | 6 | 4 | 1 | X |
5 | 5 | 10 | 10 | 5 | 1 |
6 | 6 | 15 | 20 | 15 | 6 |
의 규칙으로
점화식이 dp[i][j] = dp[i - 1][j -1] + dp[i - 1][j] 이 됨을 알 수 있다.
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
|
// 11051. 이항 계수 2
#include <iostream>
using namespace std;
int n, k;
int dp[1001][1001];
int main()
{
cin >> n >> k;
dp[0][0] = 1;
dp[1][0] = 1;
dp[1][1] = 1;
for (int i = 2; i < n + 1; i++)
{
for (int j = 0; j < i + 1; j++)
{
if (j == 0) dp[i][j] = 1;
else if (i == j) dp[i][j] = 1;
else
{
dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % 10007;
}
}
}
cout << dp[n][k];
return 0;
}
|
cs |
출처 : https://www.acmicpc.net/problem/11051
11051번: 이항 계수 2
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 1059번 : 좋은 구간 (C++) (0) | 2023.09.11 |
---|---|
[백준] 14400번 : 편의점 2 (C++) (0) | 2023.09.10 |
[백준] 1904번 : 01타일 (C++) (0) | 2023.09.10 |
[백준] 13398번 : 연속합 2 (C++) (0) | 2023.09.10 |
[백준] 1912번 : 연속합 (C++) (0) | 2023.09.10 |