다이나믹 프로그래밍 문제
이것도 어렵다.
d[k][n]이 k개의 수로 n을 완성한 경우의 수라고 하자.
ㅇ+ ㅇ + ..... + ㅇ + ㅇ = n
(ㅇ의 개수가 k)
여기서 마지막 ㅇ를 L라고 가정했을때 점화식은
d[k][n] = 시그마(d[k-1][n-L])
항상 점화식을 세울때 변수의 범위를 생각하여야 한다.
여기서 변수는 L이므로 L의 범위는 0<= L <= n
코드는
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> #include <iostream> #include <math.h> using namespace std; int main() { int d[201][201]; for (int i = 0; i < 201; i++) { for (int j = 0; j < 201; j++) { d[i][j] = 0; } } int n, k; cin >> n >> k; for (int i = 1; i <= k; i++) { for (int j = 0; j <= n; j++) { for (int l = 0; l <= j; l++) { d[i][j] += d[i - 1][j - l]; d[i][j] %= 1000000000; } } } cout << d[k][n]; } | cs |
'BOJ' 카테고리의 다른 글
백준 1389 / 케빈 베이컨의 6단계 법칙 (0) | 2018.12.30 |
---|---|
백준 1010 / 다리 놓기 (0) | 2018.12.30 |
백준 1699 / 제곱수의 합 (0) | 2018.12.29 |
백준 1912 / 연속합 (0) | 2018.12.28 |
백준 14002 / 가장 긴 증가하는 부분 수열 4 (0) | 2018.12.27 |