Computer Science/Algorithm

[Algorithm/C] BOJ.1149 RGB거리(미해결)

재오니소스 2018. 1. 22. 23:54

문제

RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이다. 처음 집과 마지막 집은 이웃이 아니다.

각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로 칠할 때, 초록으로 칠할 때, 파랑으로 칠할 때 드는 비용이 주어진다.

출력

첫째 줄에 모든 집을 칠할 때 드는 비용의 최솟값을 출력한다.

예제 입력 복사

3
26 40 83
49 60 57
13 89 99

예제 출력 복사

96

 

출처: <https://www.acmicpc.net/problem/1149


왜 오답처리 되는지 모르겠음...


#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>

#include <stdlib.h>


int Cost[1001][4] = { 0 };

int dp[1001][4] = { 0 };

enum {R,G,B};


int main(int argc, char * argv[]) {

int n;

int sum = 0;


scanf("%d", &n);


for (int i = 0; i < n; i++) {

scanf("%d %d %d", &Cost[i][R], &Cost[i][G], &Cost[i][B]);

}

for (int i = 0; i <= n; i++) {

dp[i][0] = Cost[i][R] + (Cost[i - 1][G] < Cost[i - 1][B] ? dp[i - 1][G] : dp[i - 1][B]);

dp[i][1] = Cost[i][G] + (Cost[i - 1][R] < Cost[i - 1][B] ? dp[i - 1][R] : dp[i - 1][B]);

dp[i][2] = Cost[i][B] + (Cost[i - 1][R] < Cost[i - 1][G] ? dp[i - 1][R] : dp[i - 1][G]);

}

if (dp[n][R] < dp[n][G]) {

if (dp[n][R] < dp[n][B]) {

printf("%d\n", dp[n][R]);

}

else {

printf("%d\n", dp[n][B]);

}

}

else {

if (dp[n][G] < dp[n][B]) {

printf("%d\n", dp[n][G]);

}

else {

printf("%d\n", dp[n][B]);

}

}


return 0;

}