본문 바로가기
[C, C++ 알고리즘]

[백준 1010] 다리 놓기

by BeNev0L 2021. 11. 26.

이번 문제는 점화식만 구하면 된다.

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