https://www.acmicpc.net/problem/11051
1. 분류
다이나믹 프로그래밍
2. 풀이
파스칼의 삼각형이 이항계수를 나타낸다는 것을 알고 있었다면 쉽게 풀리는 문제이다.
![]()
최상단 1을 초기화하고 이후부터 좌측, 우측 끝단을 1로 만든 후 가운데 숫자를 만들어내면 끝이다.
2차원 배열 d[y][x]가 이항계수에 들어갈 숫자들을 저장한다.
가장 윗 줄부터 하나씩 채워넣으며 N, K를 구하면 된다.
3. 소스코드
#include <cstdio>
long long d[1001][1001] = { 0 };
int main()
{
int n, k;
scanf("%d %d", &n, &k);
for (int i = 0; i <= n; i++)
{
d[i][i] = d[i][0] = 1;
for (int j = 1; j <= i - 1; j++)
d[i][j] = (((d[i - 1][j - 1] % 10007) + (d[i - 1][j]) % 10007)) % 10007;
}
printf("%llu\n", d[n][k]);
return 0;
}
'알고리즘' 카테고리의 다른 글
| BOJ [1182] 부분집합의 합 (0) | 2017.08.31 |
|---|---|
| BOJ [9461] 파도반 수열 (0) | 2017.08.15 |
| BOJ [2225] 합분해 (0) | 2017.08.15 |
| BOJ [1920] 수 찾기 (0) | 2017.08.14 |
| BOJ [1629] 곱셈 (0) | 2017.08.13 |