이번 문제는 점화식만 구하면 된다.
DP[2][2] = DP[1][1]
DP[2][3] = DP[1][2] + DP[1][1]
DP[2][4] = DP[1][3] + DP[1][2] + DP[1][1]
규칙이 보이는가?
DP[2][3] = DP[1][2] + DP[1][1] 에서 DP[1][1]을 DP[2][2]로 치환하면
DP[2][3] = DP[2][2] + DP[1][2]
DP[2][4] = DP[1][3] + DP[1][2] + DP[1][1] 에서 DP[1][2] + DP[1][1]를 DP[2][3]으로 치환하면
DP[2][4] = DP[2][3] + DP[1][3]
그림으로 그리면 쉽다. 이해하기. 한번 해보는 걸 추천s
<소스코드>
#include <iostream>
using namespace std;
int main()
{
int T;
int DP[31][31] = { 0 };
cin >> T;
while(T--){
int N, M;
cin >> N >> M;
for(int i = 1; i <= M; i++){
DP[1][i] = i;
}
for(int i = 2; i <= N; i++){
for(int j = 2; j <= M; j++){
DP[i][j] = DP[i-1][j-1] + DP[i][j-1];
}
}
cout << DP[N][M] << endl;
}
return 0;
}
점화식만 찾으면 쉽다.
끝.
'[C, C++ 알고리즘]' 카테고리의 다른 글
n-Queens Problem - BackTracking (0) | 2021.12.13 |
---|---|
All pairs Shortest path Problem - Floyd Warshall Algorithm. (0) | 2021.12.10 |
[백준 1009] 분산처리 (0) | 2021.11.15 |
[백준 1005] ACM CRAFT (0) | 2021.11.13 |
[백준 1004] 어린 왕자 (0) | 2021.11.10 |