#include<bits/stdc++.h>
using namespace std;
int dp[301];
int arr[301];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
}
dp[1] = arr[1];
dp[2] = max(arr[1] + arr[2], arr[2]);
dp[3] = max(arr[1] + arr[3], arr[2] + arr[3]);
for (int i = 4; i <= n; i++) {
dp[i] = max(dp[i - 3] + arr[i - 1] + arr[i], dp[i - 2] + arr[i]);
}
cout << dp[n];
}
- dp1=첫번째 계단 올랐을 경우
- dp2=첫번째 계단 오른경우+두번째 계단 오른경우 와 두번째 계단을 바로 가는 경우를 비교
- dp3=첫번째 계단+셋번째 계단과, 두번째 계단과 세번째 계단을 올랐을 때 경우를 비교
dp4 = 4번째 계단을 오를 때의 최대값이 저장되어야 한다.
dp4의 경우의 수
dp1,2,3 에는 경우의 수들의 최대값이 들어 있기때문에 첫번째 칸에서 3,4 가는경우와 2번째에서 바로 4번째 가는 경우를 비교해주면, 연속으로 3번을 피해 모든 경우를 비교할 수 있다.
'Algorithm' 카테고리의 다른 글
[백준] 알고리즘 2133번 - 타일 채우기 문제 (0) | 2020.12.11 |
---|---|
[백준] 알고리즘 1699번 - 제곱수의 합 문제 (0) | 2020.12.11 |
[백준] 알고리즘 1912번 - 연속합 문제 (0) | 2020.11.30 |
[백준] 알고리즘 1157번 - 단어공부 문제 (0) | 2020.11.23 |
[백준] 알고리즘 2562번 - 최댓값 문제 (0) | 2020.11.22 |