0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.
K
: 정수의 개수, N
: 구하고자 하는 수 L
: 마지막에 오는 정수 #include <iostream>
using namespace std;
constexpr int MOD = 1000000000;
int N, K;
int dp[201][201] = {1,}; // 0은 그 자체로 경우의 수 1이므로
int solve() {
for (int i = 1; i <= K; ++i) // 개수: 1개부터 K개 까지
for (int j = 0; j <= N; ++j) // 숫자: 0부터 N까지 정수
for (int l = 0; l <= j; ++l){ // 마지막 숫자: 0부터 j까지
dp[i][j] += dp[i - 1][j - l]; // i개 숫자를 써서 j를 만드는 것은
dp[i][j] %= MOD; // i-1개 숫자를 써서 j-1 만드는 경우들의 합
}
return dp[K][N];
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> N >> K;
cout << solve() << '\n';
}