문제출처 : https://www.acmicpc.net/problem/2579
1. 문제요약
- 계단을 하나 건너 뛸 수 있음
- 최대 2번 연속으로만 밟을 수 있음
- 마지막 계단은 무조건 밟아야 함
- 1, 2, 4, 5 순으로 밟는건 가능
- 1, 2, 3, 4 순으로 밟는건 불가능 / 1, 2, 3 이 연속으로 3번 밟았기 때문
- 최대 합은?
2. 접근방법
- 방법 1.
d[n] : n번째 계단에서 최대합
현재 계단을 밟는 경우는 전전 계단을 밟고 한칸 뛰어서 현재 계단을 밟는 경우
전 계단을 밟고 바로 연속으로 현재 계단을 밟는 경우
하지만 전계단을 밟고 현재 계단을 밟는다면 현재를 n이라 했을 때, n-1번째 계단을 밟고 온 경우가
n-1에서 두번 연속으로 밟은 경우인지 알 수 없음.
그래서 n-3에서 최대합에서 n-2를 건너뛰고 n-1과 n 값을 합하면 됨
d[n] = max(d[n-2] , d[n-3] + a[n-2]) + a[n]
- 방법 2.
포도주 시식과 비슷한 방법으로
d[3] : d[0] - 현재 계단을 밟지 않았을 때 최대합
d[1] - 현재 계단이 연속 1회 일때 최대합
d[2] - 현재 계단이 연속 2회 일때 최대합
d[0] = max(d[1], d[2])
d[1] = d[0] + a
d[2] = d[1] + a
3. 시간복잡도
- 방법 1, 2 모두 n
4. 회고
- 포도주 시식 boj 2156 과 같은 문제
소스코드 방법 2
[출처 : BOJ, 문제에 대한 모든 권리는 BOJ(acmicpc.net, startlink)에 있음]
'먹고살려면 > boj' 카테고리의 다른 글
BOJ 9461 파도반 수열 (0) | 2018.01.24 |
---|---|
BOJ 1966 제곱수의 합 (0) | 2018.01.23 |
BOJ 1912 연속합 (0) | 2018.01.21 |
BOJ 11054 가장 긴 바이토닉 부분 수열 (0) | 2018.01.20 |
BOJ 11722 가장 긴 감소하는 부분 수열 (0) | 2018.01.20 |