본문 바로가기
백준

백준 2225합분해

by 조재범 2021. 6. 5.

algorithm : DP

 

해설 

DP[i][j] = i개의 정수를 더하여 j를 만들수 있는 경우의수 

6 3의 경우 이런식으로 표가 채워진다

1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21

 

위쪽에서 오는 경우와 옆에서 오는 경우를 더한다음 MOD로 나누면서 dp 테이블을 채우고 dp[K][N]을 출력하면된다

#include<bits/stdc++.h>
#define LM 1000+10
#define INF 199999999
#define MOD 1000000000
using LL = long long;
using namespace std;

int N,K;
int dp[LM][LM];

void input(){
    scanf("%d %d",&N,&K);
}

void DP(){
    for(int i = 0 ; i <= N ; i++) dp[1][i] = 1;
    for(int i = 2 ; i <= K ; i++){
        for(int j = 0 ; j <= N ; j++){
            dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % MOD;
        }
    }
    printf("%d",dp[K][N]);
}

int main(){
    //freopen("input.txt","r",stdin);
    input();
    DP();
    return 0;
}

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

백준 1655 가운데를 말해요  (0) 2021.06.07
백준 21924 도시건설  (0) 2021.06.06
백준 2994 동전 2  (0) 2021.06.05
백준 11048 이동하기  (0) 2021.06.05
백준 11722 가장 긴 감소하는 부분 수열  (0) 2021.06.05