https://www.acmicpc.net/problem/2579

Description

계단의 수와 각 계단의 점수가 주어지며, 밟는 계단의 점수를 얻는다.
  1.  한 번에 한 계단 또는 두 계단만 이동 가능
  2. 연속된 세 계단을 모두 밟아서는 안 됨. 시작점은 포함하지 않음.
  3. 마지막 계단은 꼭 밟아야
얻을 수 있는 점수의 최댓값?

Idea

n번째 계단으로 오를 수 있는 경우는 n-1번째 계단에서 한 계단 오르거나, n-2번째 계단에서 두 계단 오르는 경우 뿐이다. n번째 계단으로 한 계단 올라와서 얻는 최고 점수들을 dp1에. n번째 계단으로 두 계단 올라와서 얻는 최고 점수들을 dp2에. 구하는 답은 max(dp1[n], dp2[n]). Base case를 생각해 보면, dp1[0] = dp2[0] = 0 dp1[1] = scores[1], dp2[1] = 0 (첫 번째 계단으로 두 계단 올라올 수 없음) dp1[2] = scores[1] + scores[2], dp2[2] = scores[2]  

Code

'Programming > Algorithm' 카테고리의 다른 글

[Dynamic Programming] 포도주 시식  (0) 2016.07.05
[Dynamic Programming] 동전 2  (0) 2016.07.05
[Dynamic Programming] 숫자 삼각형  (0) 2016.07.05
[String] KMP  (0) 2016.07.05
[Dynamic Programming] 동전 1  (0) 2016.07.05

+ Recent posts