반응형
문제 출처
백준 온라인 저지
https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
문제
입 / 출력
풀이
연속 세 개의 계단을 모두 밟지 않는 계단 오르는 최대 값을 구하기 위해서는
위의 그림처럼 현재 계단 값 + 이전 계단 값 + i - 3까지의 최대 값 혹은
위 그림처럼 현재 계단 값 + i - 2 까지의 최대 값 중 큰 값을 구하면
dp[n-1] 값이 총점수의 최댓값이 된다.
코드
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX = 301;
int n, dp[MAX], stairs[MAX];
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> stairs[i];
}
dp[0] = stairs[0];
dp[1] = max(stairs[1], stairs[0] + stairs[1]);
dp[2] = max(stairs[0] + stairs[2], stairs[1] + stairs[2]);
for (int i = 3; i < n; i++) {
dp[i] = max(dp[i - 2] + stairs[i], stairs[i - 1] + stairs[i] + dp[i - 3]);
}
cout << dp[n - 1] << "\n";
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[C++] BOJ 11052 카드 구매하기 (0) | 2022.01.05 |
---|---|
[C++] BOJ 9461 파도반 수열 (0) | 2022.01.05 |
[C++] BOJ 1912 연속합 (0) | 2022.01.04 |
[C++] BOJ 2631 줄세우기 (0) | 2022.01.01 |
[C++] BOJ 11055 가장 큰 증가하는 부분 수열 (0) | 2022.01.01 |