[적용한 알고리즘]

DP

[아이디어]

앞선 게시물 기지국과 거의 같은 방식으로 접근했다. 

구획을 연속적으로 진행하므로, 

dp[i] = max(dp[j - 1] + (i ~ j 까지 조 짜기 점수)) 로 해줬다. 

 

[생각의 흐름 / 절차] 

 

[교훈]

DP는 풀수록 모르겠다ㅋㅋ

 

<코드>

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

int dp[1001];
int main(){
    int N;
    scanf("%d", &N);

    vector<int> score(N + 1);
    for (int i = 1; i <= N; i++){
        scanf("%d", &score[i]);
    }

    for (int i = 1; i <= N; i++){
        int Max = -1;
        int Min = 10001;

        for (int j = i; j >= 1; j--){
            Max = max(score[j], Max);
            Min = min(score[j], Min);

            int res = Max - Min;

            dp[i] = max(dp[j - 1] + res, dp[i]);
        }
    }

    printf("%d\n", dp[N]);
    return 0;
}

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 1351번 무한 수열  (0) 2020.01.01
[백준] 5557번 1학년  (0) 2020.01.01
[백준] 2300번 기지국  (0) 2019.12.28
[백준] 10282번 해킹  (0) 2019.12.28
[백준] 6118번 숨바꼭질  (0) 2019.12.28

+ Recent posts