어흥

[백준 2225] 합분해 (C++) 본문

알고리즘/백준

[백준 2225] 합분해 (C++)

라이언납시오 2020. 4. 6. 18:42
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/2225

 

2225번: 합분해

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

www.acmicpc.net

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
반응형
Comments