Algorithm/Problem Solving 2020. 4. 17. 20:50

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

문제 링크

- https://www.acmicpc.net/problem/2156

 

사용 알고리즘

- DP

 

풀이

- d[i][j] = i번째 포도주까지 마셨을 때의 최대 포도주의 양. i번째 포도주는 j번 연속으로 마심

- d[i][0] = max(d[i - 1][0], d[i - 1][1], d[i - 1][2])

- d[i][1] = d[i - 1][0] + p[i]

- d[i][2] = d[i - 1][1] + p[i]

 

소스 코드

- https://github.com/moomini/algorithm/blob/master/boj/2156.cpp

#include <cstdio>
#include <algorithm>
 
using namespace std;
 
int d[10003][3];
int p[10003];
 
int main(void) {
    int n; scanf("%d"&n);
    for (int i = 1; i <= n; ++i) scanf("%d"&p[i]);
    for (int i = 1; i <= n; ++i) {
        d[i][0= max(d[i - 1][0], max(d[i - 1][1], d[i - 1][2]));
        d[i][1= d[i - 1][0+ p[i];
        d[i][2= d[i - 1][1+ p[i];
    }
    printf("%d\n", max(d[n][0], max(d[n][1], d[n][2])));
    return 0;
}

Colored by Color Scripter

cs

 

'Algorithm > Problem Solving' 카테고리의 다른 글

[BOJ/11055] 가장 큰 증가 부분 수열  (0) 2020.04.18
[BOJ/11053] 가장 긴 증가하는 부분 수열  (0) 2020.04.17
[BOJ/9465] 스티커  (0) 2020.04.16
[BOJ/11057] 오르막 수  (0) 2020.04.16
[BOJ/10844] 쉬운 계단 수  (0) 2020.04.14
posted by DevMoomin
: