본문 바로가기

Coding/백준

2225번 합분해

 기본적인 DP문제.

 

 주어진 예시를 풀어보자

 N=20, K=2 -> 20 + 0, 19 + 1, 18 + 2, ....., 0 + 20 -> 즉, 21개이다. 

 정답을 DP[N][K]라고 할때 우리는 DP[N-0][K-1] + DP[N-1][K-1] + ..... + DP[N-N][K-1]까지 더하면 된다.

 즉, DP[N][K]+=DP[N-정수][K-1] 라는 점화식을 구할 수 있다.

 

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
31
32
33
34
#include <iostream>
#define mod 1000000000
#define MAX 201
 
using namespace std;
 
int dp[MAX][MAX];
int N,K;
 
void solved(){
    
    for(int i=0;i<=N;i++){
        dp[i][1]=1;
       // dp[0][i]=1;
    }
    
    for(int j=2;j<=K;j++){
        for(int i=0;i<=N;i++){
            for(int k=0;k<=i;k++){
                dp[i][j]+=dp[i-k][j-1];
                dp[i][j]%=mod;
            }
        }
    }
    
    cout << dp[N][K]%mod << endl;
}
 
int main(){
    cin >> N >> K;
    
    solved();
}
 
cs

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

1890번 점프  (0) 2020.03.17
1965번 상자넣기  (0) 2020.03.16
1517번 버블소트  (0) 2020.03.13
11404번 플로이드  (0) 2020.03.09
6593번 상범 빌딩  (0) 2020.03.08