전형적인 2차원 DP문제이며 자주 보였던 유형이다.
오랜만에 풀어서 시간이 좀 걸리긴 했지만 점화식을 세워 3차원 반복문으로 풀었다.
문제링크 : 2225번: 합분해 (acmicpc.net)
#include <iostream>
#include <vector>
using namespace std;
#define DIV 1000000000
int main() {
int N, K;
cin >> N >> K;
vector<vector<int>> DP(K + 1, vector<int>(N + 1, 0));
DP[0][0] = 1;
for(int i = 1; i <= K; i++)
for (int j = 0; j <= N; j++) {
for (int k = 0; k <= j; k++)
{
DP[i][j] += DP[i - 1][j - k];
DP[i][j] %= DIV;
}
}
cout << DP[K][N] << endl;
return 0;
}'Coding_Test 연습 > Baekjoon Online Judge' 카테고리의 다른 글
| [BOJ] (C++) 9655 돌 게임 (0) | 2022.09.08 |
|---|---|
| [BOJ] (C++) 1309 동물원 (0) | 2022.09.07 |
| [BOJ] (C++) 11660 구간 합 구하기 5 (0) | 2022.09.06 |
| [BOJ] (C++) 1520 내리막 길 (0) | 2022.04.08 |
| [BOJ] (C++) 11048 이동하기 (0) | 2022.04.07 |