import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int minimum = Integer.MAX_VALUE;
int[][]house = new int [N][N];
int [][] DP = new int [N+1][3];
for(int i = 0; i < N; i++) {
String [] input = br.readLine().split(" ");
for(int j = 0; j < 3; j++) {
house[i][j] = Integer.parseInt(input[j]);
}
}
for(int i = 1; i < N+1; i++) {
//이번 집의 색깔을 RED로 칠할 때의 최솟값
DP[i][0] = Math.min(DP[i-1][1]+house[i-1][0],DP[i-1][2]+ house[i-1][0]);
//이번 집의 색깔을 GREEN로 칠할 때의 최솟값
DP[i][1] = Math.min(DP[i-1][0]+house[i-1][1],DP[i-1][2]+ house[i-1][1]);
//이번 집의 색깔을 BLUE로 칠할 때의 최솟값
DP[i][2] = Math.min(DP[i-1][0]+house[i-1][2],DP[i-1][1]+ house[i-1][2]);
}
for (int i = 0; i < 3; i++) {
minimum = Math.min(DP[N][i],minimum);
}
System.out.println(minimum);
}
}
전략
다이나믹 프로그래밍을 사용해야하는 경우 전체를 보면 더 풀기 힘들다.
1과 2번 ...i와 i+1만 생각해서 문제에서 구하고자 하는 값에 대한 점화식을 세우자
DP문제 많이 풀어보자,,,