백준
백준 2225: 합분해
E재HO
2022. 3. 1. 18:34
합분해 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 128 MB | 29222 | 12756 | 9227 | 42.059% |
문제
0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오.
덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다.
입력
첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다.
출력
첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.
예제 입력 1 복사
20 2
예제 출력 1 복사
21
예제 입력 2 복사
6 4
예제 출력 2 복사
84
출처
- 잘못된 데이터를 찾은 사람: tncks0121
알고리즘 분류
음 백준 11057 오르막수 문제랑 점화식이 똑같다 . 그래서 설명은 생략하겠다.
코드
#include<iostream>
#include<vector>
using namespace std;
int dp[100];
int main() {
int n, k;
cin >> n >> k ;
for (int i = 0; i <= n; i++)
dp[i] = 1;
for (int i = 2; i <= k; i++) {
for (int j = 1; j <= n; j++) {
dp[j] = (dp[j] + dp[j - 1])%1000000000;
}
}
cout << dp[n];
return 0;
}