백준

2156번 포도주 시식(DP) - ☆

조주똥 2020. 6. 19. 15:48

#문제링크 : https://www.acmicpc.net/problem/2156

<전략>

1. n번째 포도주를 0번 연속해서 마신건지, 1번 연속해서 마신건지, 2번 연속해서 마신건지로 총 3가지 상태가 나온다.

2. 0번 마셨다면, n-1번째 포도주를 0,1,2번 마신 상황 중 가장 큰 값을 n번째에 가져오면 된다.

3. 1번 마셨다면, n-1번째 포도주에서 0번 마신 상황 + 현재 n번째 포도주의 양으로 계산한다.

4. 2번 마셨다면, n-1번째 포도주에서 1번 마신 상황 + 현재 n번째 포도주의 양으로 계산한다.

1. Code

<전략>

1. 이차원 배열안쓰고 일차원 배열로 해결할 때는, 0번 연속 마시는 경우에는 d[n] = d[n-1]이고, 1번 연속 마시는 경우가 더 크면 d[n] = d[n-2] + num[n], 2번 연속 마시는 경우가 더 크면 d[n] = d[n-3] + num[n] + num[n-1]이 된다.

2. Code