반응형
<코드>
#include<iostream>
using namespace std;
int N, K;
long long DP[1001][1001];
//점화식 DP[N][K] =DP[N-1][K-1] + DP[N-1][K]
int main()
{
cin >> N >> K;
DP[0][0] = 1;
DP[1][0] = 1;
DP[1][1] = 1;
for (int i = 2; i <= N; i++)
for (int j = 0; j <= i; j++)
{
if (j == 0) DP[i][0] = 1;
else if (j == i) DP[i][j] = 1;
else DP[i][j] = (DP[i - 1][j - 1] + DP[i - 1][j]) % 10007;
// 매번 10007로 나눠주지 않으면 자료형의 크기를 초과하게 됨.
}
cout << DP[N][K];
}
출처 - 위키백과 (이항 계수)
쉬운 문제일 줄 알았는데 DP로 풀어야 한다는 것을 인지하지 못해서 많이 헤맸다.
초기값 세팅 후 점화식은
DP[i][j] = DP[i - 1][j - 1] + DP[i - 1][j] % 10007
위와같이 구했으며, 매 연산마다 10007로 나누어주어 메모리 범위를 초과하지 않도록 하였다.
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 1676번 - 팩토리얼 0의 개수 (0) | 2020.12.06 |
---|---|
[C/C++] 백준 9375번 - 패션왕 신해빈 (3) | 2020.12.05 |
[C/C++] 백준 3036번 - 링 (0) | 2020.12.03 |
[C/C++] 백준 2609번 - 최대공약수와 최소공배수 (유클리드 호제법과 증명) (0) | 2020.12.02 |
[C/C++] 백준 5086번 - 배수와 약수 (0) | 2020.12.02 |