코드
#include <iostream>
#include <algorithm>
using namespace std;
int stairs[301];
int arr[301][2];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for(int i=0;i<n;i++) {
cin >> stairs[i];
}
arr[0][1] = stairs[0];
arr[1][2] = arr[0][1] + stairs[1];
arr[1][1] = stairs[1];
for(int i=2;i<n;i++) {
arr[i][1] = max(arr[i-2][1], arr[i-2][2]) + stairs[i];
arr[i][2] = arr[i-1][1] + stairs[i];
}
cout << max(arr[n-1][1], arr[n-1][2]);
}
코드 분석
점화식을 세울 때, 2차원 배열 arr[][] 을 사용하였다.
arr[i][1] => 1칸 째에 i번 계단을 밟았을 때의 최대 점수
arr[i][2] => 2칸 째에 i번 계단을 밟았을 때의 최대 점수
점화식
arr[i][1] = max(arr[i-2][1], arr[i-2][2]) + stairs[i]
arr[i][2] = arr[i-1][1] + stairs[i]
'BOJ > DP' 카테고리의 다른 글
[C++] BOJ 9251 / DP (LCS 최장 공통 부분 수열) (0) | 2021.08.10 |
---|---|
[C++] BOJ 9095 / DP (1, 2, 3 더하기) (0) | 2021.08.10 |
[C++] BOJ 1463 / DP (1로 만들기, 점화식 첫 도전) (0) | 2021.08.10 |