Algorithm/dp
백준 1149 RGB거리 c++ // dp, 테이블정의(2차원)
Mini_96
2023. 10. 9. 19:36
https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
1. 문풀 및 전체코드
#include <bits/stdc++.h>
using namespace std;
//i번째 집을 j색으로 칠했을때 최소비용, 칠한색깔(0:빨, 1:초, 2:파)
int d[1004][3], a[1004][3];
int n;
/*
* d[1][0]
* d[1][1]
* d[1][2]
*
* d[k][0] : max(d[k-1][1]+a[k][0], d[k-1][2]+a[k][0]) //이전에 초록, 파란색만 가능
*/
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i][0];
cin >> a[i][1];
cin >> a[i][2];
}
d[0][0] = a[0][0];
d[0][1] = a[0][1];
d[0][2] = a[0][2];
for (int i = 1; i < n; ++i) {
d[i][0] = min(d[i - 1][1] + a[i][0], d[i - 1][2] + a[i][0]);
d[i][1] = min(d[i - 1][0] + a[i][1], d[i - 1][2] + a[i][1]);
d[i][2] = min(d[i - 1][0] + a[i][2], d[i - 1][1] + a[i][2]);
}
int ret = d[n-1][0];
ret = min(ret, d[n - 1][1]);
ret = min(ret, d[n - 1][2]);
cout << ret;
}