댄코 - 댄싱코딩

[1149] RGB거리 본문

코딩/알고리즘

[1149] RGB거리

Jk hila 2017. 6. 30. 01:11

dp를 공부하면서 처음 풀어봤던 문제다.

dp에대한 개념이 아직 부족해서 어려웠다.

#include <cstdio>
#include <algorithm>
using namespace std;

int table[1000][3] = {};

int main()
{
    int N = 0;
    int r = 0;
    int g = 0;
    int b = 0;
    scanf("%d", &N);

    for (int i = 0; i < N; i++)
    {
        scanf("%d %d %d", &r, &g, &b);

        if (i == 0)
        {
            table[0][0] = r;
            table[0][1] = g;
            table[0][2] = b;
        }
        else
        {
            table[i][0] = min(table[i-1][1],table[i-1][2]) + r;
            table[i][1] = min(table[i-1][0],table[i-1][2]) + g;
            table[i][2] = min(table[i-1][0],table[i-1][1]) + b;
        }
    }
    printf("%d\n",min(min(table[N-1][0],table[N-1][1]),table[N-1][2]));
}

처음입력값은 각각 table[0][0],table[0][1],table[0][1]에 저장해두고
그 이후로는 전 집과 칠한 색이 같으면 안되므로 다른 색을 칠했을 때의 최솟값을 table에 저장한다.

'코딩 > 알고리즘' 카테고리의 다른 글

[9251] LCS  (0) 2017.07.01
[2965] 캥거루 세마리  (0) 2017.06.30
[1463] 1로 만들기  (0) 2017.06.30
[2579] 계단오르기  (0) 2017.06.30
[1932] 숫자삼각형  (0) 2017.06.30
Comments