본문 바로가기

PS/백준

[백준 1149번] RGB거리 C++

728x90

www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

탑다운방식으로 풀려다 도저히 힘들어서

바텀업 방식으로 풀었다.

 

만약 dp(n)이 n번쨰 집까지 쓴 cost라면

dp(n) = cost(n)+min(dp(n-1,안쓴색),dp(n-1,안쓴색))

이렇게 점화식을 세웠다

 

탑다운으로 풀다 머리빠질뻔

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
 
//두번째 idx 가 0=빨 1=초 2=파
int cost[1001][3];
int dp[1001][3];
 
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 0; j < 3; j++)
            cin >> cost[i][j];
 
    for (int i = 1; i <= n; i++) {
        dp[i][0= cost[i][0+ min(dp[i - 1][1], dp[i - 1][2]);
        dp[i][1= cost[i][1+ min(dp[i - 1][0], dp[i - 1][2]);
        dp[i][2= cost[i][2+ min(dp[i - 1][0], dp[i - 1][1]);
    }
    cout << min(dp[n][0], min(dp[n][1], dp[n][2]));
    return 0;
}
cs
728x90

'PS > 백준' 카테고리의 다른 글

[백준 2579번] 계단 오르기 C++  (0) 2021.05.12
[백준 1932번] 정수 삼각형 c++  (0) 2021.05.12
[백준 9461번] 파도반 수열 c++  (0) 2021.05.12
[백준 1904번] 01타일 C++  (0) 2021.05.12
[백준 9184번] 신나는 함수 실행 C++  (0) 2021.05.12