반응형
문제 주소
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다.
www.acmicpc.net
알고리즘
DP
힌트
배열에 각 집에서 각각의 색을 칠하는데 최소 비용을 저장한다.
문제 풀이
dp
배열은 그 집에서 각 색을 칠할때의 최소 비용을 저장하는 배열이다. RGB
를 각각 012
원소에 넣고 i
번째 집에서 0
번째 색을 칠하기 위한 최소 비용은 i-1
번째 집에서 1
또는 2
를 칠하기 위한 최소 비용중 작은 값에 cost[i][0]
을 더한 값이다.
#include<iostream>
using namespace std;
int cost[1000][3];
int dp[1000][3];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>cost[i][0]>>cost[i][1]>>cost[i][2];
}
dp[0][0]=cost[0][0];
dp[0][1]=cost[0][1];
dp[0][2]=cost[0][2];
for(int i=1;i<n;i++){
for(int j=0;j<3;j++){
dp[i][j]=min(dp[i-1][(j+1)%3],dp[i-1][(j+2)%3])+cost[i][j];
}
}
cout<<min(min(dp[n-1][1],dp[n-1][0]),dp[n-1][2]);
}
반응형
'Problem Solve > Dynamic Programming' 카테고리의 다른 글
[백준] 10844번 쉬운 계산 수 (C) (0) | 2020.03.30 |
---|---|
[백준] 1932번 정수 삼각형 (C) (0) | 2020.03.29 |
[백준] 9461번 파도반 수열 (C) (0) | 2020.03.28 |
[백준] 1904번 01타일 (C) (0) | 2020.03.28 |
[백준] 1003번 피보나치 함수 (0) | 2020.03.28 |