본문 바로가기
알고리즘

[BOJ] 백준 2225번: 합분해

by 강성주의 알고리즘 2020. 6. 29.

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

 

2225번: 합분해

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

www.acmicpc.net

0~N까지 정수 K개를 더하여 N을 만드는 경우의 수를 구하는 문제입니다. 이를 식으로 나타내면 아래와 같습니다.

각 a의 값은 0 이상이므로 중복 순열의 식으로 구할 수 있습니다. 

#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <memory.h>
#include <math.h>
#include <algorithm>
#define MOD (1000000000)
using namespace std;
int n, m;
int ncr[401][401] = { 0, };
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	ncr[0][0] = 1;
	for (int i = 1; i <= 400; i++) { // nCr
		ncr[i][0] = 1;
		for (int j = 1; j <= i; j++) {
			ncr[i][j] = ncr[i - 1][j] + ncr[i - 1][j - 1];
			ncr[i][j] %= MOD;
		}
	}
	cout << ncr[n + m - 1][n];
	
}
반응형