본문 바로가기
  • Let's study
PS/백준

[C++] 백준 2225번: 합분해

by 코딩고수이고파 2021. 9. 12.

dp라는 건 금방 감이 왔고 N과 K가 만큼 더해야 하니까 2차원 배열을 써야겠다고 생각이 났다.

dp 배열에서 행은 N, 열은 K를 저장한다고 볼 때 dp[3][3]을 구해보자.

dp[1][1]=1, dp[1][2]=2, dp[1][3]=1;
dp[2][1]=1, dp[2][2]=3, dp[2][3]=4;
dp[3][1]=1, dp[3][2]=4, dp[3][3]=8;

dp[2][2]=dp[1][1]+dp[1][2]이고
dp[3][3]=dp[2][1]+dp[2][2]+dp[2][3] 임을 볼 수 있다.

 

#include<iostream>
#define MAX 1000000000

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int n, k;
	cin >> n >> k;

	long long dp[201][201] = { 0, };

	for (int i = 1; i <= 200; i++) {
		dp[1][i] = i;
	}

	for (int i = 2; i <= n; i++) {
		for (int z = 1; z <= k; z++) {
			for (int j = 1; j <= z; j++) {
				dp[i][z] = (dp[i][z] + dp[i - 1][j] % MAX)%MAX;
			}
		}
	}

	cout << dp[n][k];
	return 0;
}

'PS > 백준' 카테고리의 다른 글

[C++] 백준 1946: 신입사원  (0) 2021.11.01
[C++] 백준 1931번: 회의실 배정  (0) 2021.11.01
[C++] 백준 2468번: 안전 영역  (0) 2021.09.12
[C++] 백준 20046번: Road Reconstruction  (0) 2021.09.09
[C++] 백준 6764번: Sounds fishy!  (0) 2021.03.13

댓글