fork download
  1. #include <iostream>
  2. #define MAX 9999999
  3.  
  4. using namespace std;
  5.  
  6. int rgb[3][1000];
  7. int last[3][1000];
  8. int N;
  9. int low = 9999999;
  10.  
  11. void solution(int deep, int check, int sum)
  12. {
  13. if (deep == N)
  14. {
  15. if (low > sum)
  16. low = sum;
  17. return;
  18. }
  19.  
  20. for (int i = 0; i < 3; i++)
  21. {
  22. if (check == i) continue; //이전의 색과 동일하다면 다른 색 선택
  23. else if (last[i][deep] <= sum + rgb[i][deep]) continue; // 같은 위치에 이전에 입력된 것이 더 작을 경우
  24. else last[i][deep] = sum + rgb[i][deep];
  25. solution(deep + 1, i, last[i][deep]);
  26. }
  27. }
  28. int main(void)
  29. {
  30. cin >> N;
  31.  
  32. for (int i = 0; i < N; i++)
  33. {
  34. for (int j = 0; j < 3; j++)
  35. {
  36. cin >> rgb[j][i];
  37. last[j][i] = MAX;
  38. }
  39. }
  40. solution(0, 3, 0);
  41. cout << low;
  42. return 0;
  43. }
Success #stdin #stdout 0s 4820KB
stdin
3
26 40 83
49 60 57
13 89 99
stdout
96