← Back to List

17404번: RGB거리 2 ↗

Solutions

C++14
1.1 KB | 1143 chars
#include <iostream>
#include <algorithm>
#define Mx 123456789
using namespace std;
int N;
int D[1100][5][5];
int ar[1100][5];
int main() {
    cin >> N;
    for(int y = 0; y < N; y++) {
        for(int x = 0; x<3; x++) cin >> ar[y][x];
    }

    for(int y=0; y<N;y++) {
        for(int x=0; x<3; x++) {
            for(int z =0; z<3; z++) D[y][x][z] = Mx;
        }
    }
    for(int x=0; x<3; x++) {
        D[0][x][x] = ar[0][x];
    }

    for(int y=1; y<N; y++) {
        for(int x1 = 0; x1 < 3; x1++) {
            for(int start = 0; start < 3; start++) {
                if(y == N-1) {
                    if(x1 != start) {
                        D[y][x1][start] = min(D[y-1][(x1+1)%3][start] , D[y-1][(x1+2)%3][start]) + ar[y][x1];
                    }
                }
                else {
                    D[y][x1][start] = min(D[y-1][(x1+1)%3][start] , D[y-1][(x1+2)%3][start]) + ar[y][x1];
                }


            }
        }
    }
    int ans = Mx;
    for(int x1 = 0; x1 < 3; x1 ++) {
        for(int start = 0; start < 3; start++) {
            ans = min(ans,D[N-1][x1][start]);
        }
    }
    cout<<ans;

}