내가 포도주 시식과 계단오르기 문제를 비교해서 해본 결과 이런 문제의 접근은 마지막에서 보는것이 좋은 거같다.
다이나믹 프로그래밍을 해야하므로..
마지막의 세부분 oox , xoo , oxo 은 무조건 이 세개중에 하나이다...
oox는 dp[n] = dp[n-1]
xoo는 dp[n] = dp[n-3]+wine[n]+wine[n-1]
oxo는 dp[n] = dp[n-2]+wine[n] 이다.
이 세가지중에 제일 max값을 저장하는 식으로 문제를 풀면 된다.
dp[0] = wine[0]
dp[1] = wine[1]+wine[0]
dp[2] = Max(wine[0]+wine[1], wine[1]+wine[2], wine[0]+wine[2])
이 세가지는 미리 구해놓고 시작해야하며
n의 크기에 따른 반례를 미리 정해두고 작업하길 바란다..
'알고리즘구현능력 > 문제해결능력' 카테고리의 다른 글
[java] 백준/10844 쉬운계단수 (0) | 2019.04.02 |
---|---|
[java] 백준/1912 연속합 (0) | 2019.04.01 |
[java] 백준/1932 정수삼각형 (2) | 2019.03.29 |
[java] 백준/2193 이친수 (0) | 2019.03.29 |
[java] 백준/11726 2xn타일링 (0) | 2019.03.29 |