cgy12306

[백준 BoJ] 17404 - RGB거리 2 본문

Algorithm/C++

[백준 BoJ] 17404 - RGB거리 2

cgy12306 2022. 1. 13. 16:10
// https://www.acmicpc.net/problem/17404
// RGB거리 2
#include<iostream>
#include<algorithm>

using namespace std;
int N, arr[1002][1002], dp[1002][1002];
const int INF = 999999999;
int main() {
    cin >> N;

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= 3; j++) {
            cin >> arr[i][j];
        }
    }
    
    int Min = INF;
    for (int rgb = 1; rgb <= 3; rgb++) {
        for (int i = 1; i <= 3; i++) {
            if (i == rgb) dp[1][i] = arr[1][i];
            else dp[1][i] = INF;
        }

        for (int i = 2; i <= N; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 1) {
                    dp[i][j] = min(dp[i - 1][j + 1] + arr[i][j], dp[i - 1][j + 2] + arr[i][j]);
                }
                else if (j == 2) {
                    dp[i][j] = min(dp[i - 1][j - 1] + arr[i][j], dp[i - 1][j + 1] + arr[i][j]);
                }
                else if (j == 3) {
                    dp[i][j] = min(dp[i - 1][j - 1] + arr[i][j], dp[i - 1][j - 2] + arr[i][j]);
                }
            }
        }
        /*
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= 3; j++) {
                cout << dp[i][j] << " ";
            }
            cout << "\n";
        }
        */
        for (int i = 1; i <= 3; i++) {
            if (i == rgb) continue;
            else Min = min(dp[N][i], Min);
        }
    }
    cout << Min;
}
  • 다이나믹 프로그래밍

'Algorithm > C++' 카테고리의 다른 글

[백준 BoJ] 11652 - 카드  (0) 2022.01.13
[백준 BoJ] 10825 - 국영수  (0) 2022.01.13
[백준 BoJ] 1149 - RGB의 거리  (0) 2022.01.12
[백준 BoJ] 14002 - 가장 긴 증가하는 부분 수열 4  (0) 2022.01.11
[백준 BoJ] 1904 - 01타일  (0) 2022.01.11
Comments