https://www.acmicpc.net/problem/2225
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];
}
반응형
'알고리즘' 카테고리의 다른 글
[BOJ] 백준 3176번: 도로 네트워크 (0) | 2020.07.05 |
---|---|
[ 0/1 Knapsack] 배낭 냅색 알고리즘 (0) | 2020.07.03 |
[BOJ] 백준 1005번: ACM Craft (0) | 2020.06.29 |
최장 증가 부분 수열 찾기 | 역추적 (Longest Increasing Subsequence Tracking) (0) | 2020.06.26 |
최장 증가 부분수열: LIS (Longest Increasing Sub-sequence) (0) | 2020.06.25 |