코딩테스트 연습/Baekjoon

[Baekjoon] 2225번: 합분해 / dynamic

수기 2022. 4. 1. 02:18

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

 

2225번: 합분해

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

www.acmicpc.net

1 1 => 1, 2 1 => 1, 3 1 => 1, 4 1 => 1, 5 1 => 1, 6 1 => 1,
1 2 => 2, 2 2 => 3, 3 2 => 4, 4 2 => 5, 5 2 => 6, 6 2 => 7,
1 3 => 3, 2 3 => 6, 3 3=> 10, 4 3 => 15, 5 3 => 21, 6 3 => 28,
1 4 => 4, 2 4 => 14, 3 4 => 28, 4 4 => 35, 5 4 => 56, 6 4 => 84, ... 규칙을 보면 sum[n][k] = sum[n-1][k] + sun[n][k-1]과 같다. ([n][k] = 자신의 왼쪽, 위의 합)
수가 1000000000보다 커지므로 1000000000으로나눈 나머지를 저장하고, sum배열은 long long으로 지정했다.

코드

//2225
#include <iostream>
#include <cmath>
using namespace std;


int main(int argc, const char * argv[]) {
    cin.tie(NULL);
    ios::sync_with_stdio(0);

    int n, k;
    long long sum[201][201];

    cin >> n >> k ;
    for(int i=0;i<=n;i++){
        for(int j=1;j<=k;j++){
            sum[i][j] = 1;

        }

    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=k;j++){
            sum[i][j] = (sum[i-1][j] + sum[i][j-1]) % 1000000000;
        }
    }

    cout << (sum[n][k])%1000000000;


    return 0;
}