문제

링크

풀이

#include <stdio.h>
 
int min(int a, int b) {
  return a < b ? a : b;
}
 
int main(void) {
  int n, ans = 1000000;
  int cost[1001][3], dp[1001][3];
 
  scanf("%d", &n);
  for (int i=1; i<=n; i++) {
    scanf("%d %d %d", &cost[i][0], &cost[i][1], &cost[i][2]);
  }
 
  for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
      dp[1][j] = i == j ? cost[1][j] : 1000000;
    }
    for (int j=2; j<=n; j++) {
      dp[j][0] = min(dp[j-1][1], dp[j-1][2]) + cost[j][0];
      dp[j][1] = min(dp[j-1][2], dp[j-1][0]) + cost[j][1];
      dp[j][2] = min(dp[j-1][0], dp[j-1][1]) + cost[j][2];
    }
    for (int j=0; j<3; j++) {
      if (i == j) continue;
      ans = min(ans, dp[n][j]);
    }
  }
 
  printf("%d", ans);
  return 0;
}