문제 : https://www.acmicpc.net/problem/2225
[ 알고리즘풀이 ]
2차원 배열을 활용해야되는 DP(다이나믹 프로그래밍)문제입니다.
'DP[x][y] = 정수 y개의 합이 x가 되는 모든 경우의 수' 라고 정의하면 다음과 같은 식이 성립합니다.
1. DP[1][y] = y , for 1 <= y <= 200
2. DP[x][1] = 1 , for 1 <= x <= 200
3. DP[x][y] = DP[x -1][y] + DP[x][y - 1], for 2 <= x <= 200 && 2 <= y <= 200
#include<iostream>
using namespace std;
#define m 1000000000;
int dp[201][201];
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int N, K;
cin >> N >> K;
for (int j = 1; j <= 200; j++)
dp[1][j] = j;
for (int i = 1; i <= 200; i++)
dp[i][1] = 1;
for (int i = 2; i <= N; i++)
for (int j = 2; j <= K; j++)
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % m;
cout << dp[N][K];
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1495 : 기타리스트 - travelbeeee (0) | 2020.02.06 |
---|---|
[BOJ] 2530 : 인공지능 시계 - travelbeeee (0) | 2020.02.06 |
[BOJ] 11049 : 행렬 곱셈 순서 - travelbeeee (0) | 2020.02.06 |
[BOJ] 10826 : 피보나치 수 4 - travelbeeee (0) | 2020.02.05 |
[BOJ] 18242 : 네모네모 시력검사 - travelbeeee (0) | 2020.02.05 |