티스토리 뷰

백준

백준 소스코드 [C++] 17404 RGB거리 2

Hani_Levenshtein 2021. 3. 2. 08:19

www.acmicpc.net/problem/17404

 

17404번: RGB거리 2

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

백준 소스코드 [C++] 17404 RGB거리 2

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#define all(v) v.begin(), v.end()
#define pii pair<int,int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;
int arr[3][1001];
int res[3][1001];
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin >> n;
	int ret = 987654321;
	for (int i = 1;i <= n;i++) cin >> arr[0][i] >> arr[1][i] >> arr[2][i];

	for (int j = 0;j <= 2;j++) {

		for (int k = 0;k <= 2;k++)
			if (j == k) res[k][1] = arr[k][1];
			else res[k][1] = 987654321;

		for (int i = 2;i <= n;i++) {
			res[0][i] = min(res[1][i - 1], res[2][i - 1]) + arr[0][i];
			res[1][i] = min(res[0][i - 1], res[2][i - 1]) + arr[1][i];
			res[2][i] = min(res[0][i - 1], res[1][i - 1]) + arr[2][i];
		}

		for (int k = 0;k <= 2;k++) if (j != k) ret = min(ret, res[k][n]);
	}
	cout << ret;

	return 0;
}
댓글