Algorithm/백준
C++ 알고리즘 - 백준 2579 계단 오르기 (다이나믹 프로그래밍)
마루설아
2025. 1. 5. 16:10
https://www.acmicpc.net/problem/2579
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
int main(void) {
/************** C++ Init **************/
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
/************** C++ Init **************/
int input1, input2;
int score = 0;
vector<int> v;
vector<int> v2;
cin >> input1;
for (int i = 0; i < input1; i++) {
cin >> input2;
v.push_back(input2);
}
v2.push_back(v[0]);
v2.push_back(v[0] + v[1]);
v2.push_back(max(v[0] + v[2], v[1] + v[2]));
for (int i = 3; i < v.size(); i++) {
v2.push_back(max(v2[i - 2] + v[i], v2[i - 3] + v[i - 1] + v[i]));
}
cout << v2[input1 - 1];
}
점화식
계단 1개 : 1번
계단 2개 : 1번 + 2번
계단 3개
1번 + 3번
&
2번 + 3번 중 최대값
계단 4개부터
마지막 계단 - 2칸의 최고값 + 지금 계단 값
&
마지막 계단 - 3칸의 최고값 + 지금 계단 - 1칸의 값 + 지금 계단 값 중 최대값