PS/동적 계획 알고리즘[DP]

백준 2579 계단 오르기(c++)

SeungbeomKim 2022. 8. 23. 22:07
반응형

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

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

<코드>

#include <iostream>
#include <algorithm>
#define max 301
int dp[max];
int arr[max];
using namespace std;
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>arr[i];
	}
	dp[1] = arr[1];
	dp[2] = arr[1] + arr[2];
	dp[3] = arr[1] + arr[3] > arr[2] + arr[3] ? arr[1] + arr[3] : arr[2] + arr[3];
	
	for(int i=4;i<301;i++)
	{
		dp[i] = dp[i-2] + arr[i] >dp[i-3] + arr[i] + arr[i-1] ? dp[i-2] + arr[i] : dp[i-3] + arr[i] + arr[i-1]; 	
	}
	cout<<dp[n]; 
}

<문제 풀이>

dp[1] => 첫번째 계단을 올랐을때

dp[2] => 첫번째 계단 + 두번째 계단

dp[3] => max(첫번째 계단 + 세번째 계단, 두번째 계단 + 세번째 계단)

dp[4] => max(첫번째 계단 + 두번째 계단 + 네번째 계단, 첫번째 계단 + 세번째 계단 + 네번째 계단)

으로 생각할 수 있다.

왜냐하면 계단은 세 번 연속 뛸 수 없으며 최대 두 칸이기 때문에, 이전 값을 이용해서 최댓값을 구하는 dp를 통해 구현할 수 있다.

반응형

'PS > 동적 계획 알고리즘[DP]' 카테고리의 다른 글

[DP] Optional Substructure[최적 하위 구조]  (1) 2023.01.16
[DP] Dynamic Programming에 대해서  (1) 2023.01.16
백준 2294 동전 2(c++)  (0) 2022.07.29
백준 2293 동전 2(c++)  (0) 2022.07.29
백준 1958 LCS 3(c++)  (0) 2022.07.24