관리 메뉴

너와 나의 스토리

[BOJ] 2579 계단 오르기 본문

Algorithm/Dynamic Programming

[BOJ] 2579 계단 오르기

노는게제일좋아! 2020. 3. 25. 20:52
반응형

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

 

문제 풀이:

  1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
  2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.

=> K번째 계단을 밟을 수 있는 경우는 다음과 같다:

1. stairs[K-3], stairs[K-1] -> stairs[K]

2. stairs[K-2] -> stairs[K]

 

위 그림과 같이 항상 조건을 만족하게 된다.

 

 

 

소스 코드:

더보기
#include <iostream>
#include <algorithm>
using namespace std;

int n,arr[305],dp[305];


int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL), cout.tie(NULL);

	cin >> n;

	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
	}
	dp[1] = arr[1];
	dp[2] = arr[1] + arr[2];
	for (int i = 3; i <=n; i++) {
		dp[i] = max(dp[i - 3] + arr[i - 1] + arr[i], dp[i - 2] + arr[i]);
	}
	cout << dp[n] << '\n';
	return 0;
}
반응형

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

[BOJ] 9095번: 1,2,3 더하기  (0) 2020.05.09
[BOJ] 2225 합분해  (0) 2020.05.04
(BOJ) 14863 서울에서 경산까지  (0) 2019.07.16
(BOJ) 14697 방 배정하기  (0) 2019.07.16
(BOJ) 1890 점프  (0) 2019.05.21
Comments