오답노트
[DP] BOJ 11051번 이항 계수 2 - 오답노트 본문
https://www.acmicpc.net/problem/11051
11051번: 이항 계수 2
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
- 문제파악
이항계수 n,k 의 값을 10007로 나눈 나머지로 출력하라
- 나의 접근
이항 계수 1에서 나머지와 for문을 살짝 바꿔줬는데 해도해도 안되더라..
- 정답
점화식을 활용해 메모이제이션을 해야한다.이항 계수의 성질중 하나는 다음과 같다.
nCk = (n-1)Ck + (n-1)C(k-1)
참고로 위 공식은 파스칼의 삼각형과 같다.
위 공식을 점화식으로 메모이제이션을 실시한다.
초항인 k 가 0일때 그리고 k가 n 일때는 값이 1이다.
#include "bits/stdc++.h"
using namespace std;
unsigned long long arr[1001][1001];
int main()
{
cin.tie(0);
ios::sync_with_stdio(0);
for (int i = 1; i <= 1000; i++)
{
arr[i][0] = arr[i][i] = 1;
for (int j = 1; j < i; j++)
{
arr[i][j] = (arr[i-1][j] + arr[i-1][j-1])%10007;
}
}
int n, k;
cin >> n >> k;
cout << arr[n][k];
}
'C,C++ > 코딩테스트' 카테고리의 다른 글
[이분탐색] BOJ 10816번 숫자 카드2 - 오답노트 (0) | 2022.06.10 |
---|---|
[이분탐색] BOJ 1920번 수 찾기 (0) | 2022.06.09 |
[수학] BOJ 11050번 이항 계수 1 (0) | 2022.06.08 |
[수학] BOJ 4796번 캠핑 (0) | 2022.06.08 |
[브루트포스] BOJ 6064 카잉달력 - 오답노트 (0) | 2022.06.08 |