이 문제도 진짜 어려웠다. 계단 오르기 처럼 하면 될 줄알았는데, 예상외로 변수가 많았다.
일단 잔이 1개 있다면, 그 1잔이 바로 최댓값이다. dp[1] = arr[1]
잔이 2개있다면 2개를 마시는게 최댓값이다. dp[2] = arr[1] + arr[2]
잔이 3개있다면? 여기서부터 문제인데 바로 연속으로 3잔은 마실 수 없는것이다.
이제 점화식을 풀어보자
1) N번째로 마시는 포도주를 안마시겠다면?
N번째 포도주가 양이 적어 건너뛰는게 나을 수도있다.
이럴땐 dp[N] = dp[N-1] (N번째를 마시지 않았으므로)
2) N번째로 마시는 포도주가 1번 연속이라면?
1번 연속이다라는건 앞의 포도주를 건너뛰고 처음으로 마셨다는 뜻이다
그럼 n-1번째는 절대 마시면 안된다. 대신 n-2번째는 마시든 말든 상관없다.
이럴땐 dp[N] = dp[N-2] + arr[N]
3) N번째로 마시는 포도주가 2번 연속이라면?
2번 연속이다라는건 N-1번째는 무조건 마신다는 뜻이다.
그럼 n-2번째는 절대 마시면 안된다. 대신 n-3번째는 마시든 말든 상관없다.
이럴땐 dp[N] = dp[N-3] + arr[N-1] + arr[N]
이 중 최댓값을 구하면 된다!
<풀이 소스>
이건 설명이 좀 약한듯한데.....
좀 더 쉬운 설명방법이 생각나면 수정하겠다...
'알고리즘 > 동적계획법' 카테고리의 다른 글
동적계획법의 기초 (0) | 2019.08.31 |
---|---|
[백준] 1912번 연속합 (0) | 2019.01.26 |
[백준] 1932번 정수 삼각형 (0) | 2019.01.26 |
[백준] 1149번 RGB거리 (0) | 2019.01.25 |
[백준] 11727번 2 x n 타일링 2 (0) | 2019.01.24 |