본문 바로가기

알고리즘/백준

2225번 : 합분해(점화식의 중요성)

https://www.acmicpc.net/problem/2225

 

2225번: 합분해

첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

 

규칙을 찾아보려고 했을 때 쉽지 않았다. DP에서 가장 중요한 것은 점화식이 아닐까...

 

 

우선 점화식이 찾는 습관부터 들이도록 하자.

 

 

 


 

 

하향식 접근으로 간단하게 문제를 풀어보았다.

 

 

 

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
#include <iostream>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
int N, K;
long long dp[201][201];
long long solve(int N, int K) {
    if (K == 1)
        return 1;
 
    if (dp[N][K] != -1)
        return dp[N][K];
 
    dp[N][K] = 0;
    for (int i = 0; i <= N; i++)
        dp[N][K] = ((dp[N][K]) + (solve(N - i, K - 1) % 1000000000)) % 1000000000;
 
    return dp[N][K];
}
int main(void) {
    cin >> N >> K;
    memset(dp, -1sizeof(dp));
    cout << solve(N, K) << endl;
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

'알고리즘 > 백준' 카테고리의 다른 글

9252번 : LCS 2  (0) 2020.02.03
11066번 : 파일 합치기  (0) 2020.02.01
1890번 : 점프  (0) 2020.01.31
11054번 : 가장 긴 바이토닉 부분 수열  (0) 2020.01.31
1520번 : 내리막 길(C++, 시간 초과, Bottom-up, Top-down)  (0) 2020.01.28