728x90
https://www.acmicpc.net/problem/11051
문제 풀이
배열 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;
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 9375번 : 패션왕 문희조 (0) | 2021.07.19 |
---|---|
[C++] 백준 1010번 : 다리 놓기 (0) | 2021.07.19 |
[C++] 백준 3036번 : 링 (0) | 2021.07.03 |
[C++] 백준 2981번 : 검문 (0) | 2021.07.03 |
[C++] 백준 13305번 : 주유소 (0) | 2021.07.01 |
댓글