#include <iostream>
using namespace std;
int DP[1001][3] = { 0 };
int main() {
int N;
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> DP[i][0] >> DP[i][1] >> DP[i][2];
}
for (int i = 2; i <= N; i++) {
for (int j = 0; j < 3; j++) {
if (j == 0) {
DP[i][j] += min(DP[i - 1][1], DP[i - 1][2]);
}
else if (j == 1) {
DP[i][j] += min(DP[i - 1][0], DP[i - 1][2]);
}
else if (j == 2) {
DP[i][j] += min(DP[i - 1][0], DP[i - 1][1]);
}
}
}
int ans = DP[N][0];
for (int i = 0; i < 3; i++) {
ans = min(ans, DP[N][i]);
}
cout << ans;
}


i번 째 집에 각각의 색 R,G,B를 칠했을 때의 최소 비용 값으로 표를 갱신해서, 최종적으로 마지막 줄에서 가장 작은 값이 정답이 되었다

문제 정리를 잘하시네요! 잘 보고 갑니다.