1495

백준 1495번

Link: 1495번: 기타리스트


문제 설명

무난하게 풀어냈던 DP 문제.

앞에서 풀어봤던 1학년 문제에서 썼던 알고리즘으로 풀면 쉽게 풀리는 문제였다.

오히려 이 문제가 좀 더 쉬웠던게, 이 문제에서 중요한 것은 횟수가 아닌 방문 가능 여부만 True/False로 확인하면 되기 때문이다.

1학년 문제 풀듯이 DP배열을 채우고 DP 배열에서 값이 true인 것의 최대 인덱스를 출력해주면 풀린다.

1학년 문제가 하나의 DP문제 풀이 템플릿이 되는 느낌이다.

잘 기억해둬야지


정답 코드

//
// Created by Keith_Lee on 24/03/2019.
//

#include <iostream>

using namespace std;

bool DP[101][1001];

int N, S, M;

int main(){
    cin >> N >> S >> M;

    DP[0][S] = true;

    for(int i=1; i<=N; i++){
        int gap;
        cin >> gap;

        for(int j=0; j<=M; j++){
            if(DP[i-1][j]){
                if(j - gap >= 0){
                    DP[i][j-gap] = true;
                }

                if(j + gap <= M){
                    DP[i][j+gap] = true;
                }
            }
        }
    }

    int result = -1;
    for(int i=0; i<=M; i++){
        if(DP[N][i]){
            result = i;
        }
    }

    cout << result << '\n';

    return 0;
}

Tags:

Categories:

Updated: