어흥
[백준 2225] 합분해 (C++) 본문
728x90
반응형
문제 링크: https://www.acmicpc.net/problem/2225
1. 주의할 점
- 2차 배열을 통해 기존의 값을 메모하고 있어야한다(메모아이제이션 기법)
2. 구현
- 1개의 정수를 통해 원하는 정수를 나타내는 경우는 모두 1로 처리해준다
- N개의 정수를 통해 원하는 정수(Tot)를 만드는 경우의 수는 N-1개의 정수 + 1개의 정수 = Tot와 같이 만든다고 생각한다. 단, 1개의 정수는 0~Tot - (N-1개 정수의 합)까지 가능하다
#include <iostream>
using namespace std;
long long arr[201][201]; //(앞의 번호)개를 사용하여 (뒤의 번호)를 만든다
long long MOD = 1000000000;
int main() {
long long tot;
int num;
cin >> tot >> num;
for (int j = 0; j <= tot; j++)
arr[1][j] = 1;
for (int i = 1; i <= num; i++) {
for (int j = 0; j <= tot; j++) {
for (int k = j; k >= 0; k--) {
arr[i][j] += arr[i - 1][j - k];
arr[i][j] %= MOD;
}
}
}
cout << arr[num][tot];
system("pause");
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17305] 사탕 배달 (C++) (0) | 2020.04.09 |
---|---|
[백준 10422] 괄호 (C++) (0) | 2020.04.07 |
[백준 14225] 부분수열의 합 (C++) (0) | 2020.04.05 |
[백준 1826] 연료 채우기 (C++) (0) | 2020.04.04 |
[백준 1715] 카드 정렬하기 (C++) (0) | 2020.04.04 |
Comments