문제 풀이/백준(BOJ)

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

희조당 2021. 7. 11. 12:28
728x90

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

 

11051번: 이항 계수 2

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

www.acmicpc.net


 문제 풀이

배열 DP에 이항 계수를 저장하면 된다.

이때 이항 계수의 값은 파스칼의 법칙을 이용하면 쉽다!

 느낀 점

고등학교 때 배웠던 파스칼의 법칙을 이렇게 쓸 줄은 몰랐다. 처음에는 파스칼의 법칙을 기억하지 못해서 없는 코드로 구현했는데 틀려서 약간의 구글링으로 해결했다.. ^.^

 코드

#include <iostream>

using namespace std;

int n, k;
long long dp[1002][1002] = { 0, };

void solution() {
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= k;j++) {
			if (j == 0 || i == j) dp[i][j] = 1;
			else if (j == 1) dp[i][j] = i;
			else if (j > i) dp[i][j] = 0;
			else dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - 1]) % 10007;
		}
	}
}

int main() {
	cin >> n >> k;
	solution();
	cout << dp[n][k] % 10007;
}