참고 자료 : https://kwanghyuk.tistory.com/4
#include <iostream>
using namespace std;
int max (int a, int b){ return a>b?a:b; }
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int stair[301], dp[301];
int N = 0;
cin >> N;
for(int i=0; i<N; i++){cin >> stair[i];}
dp[0] = stair[0];
dp[1] = max(stair[0]+stair[1], stair[1]);
dp[2] = max(stair[0]+stair[2], stair[1]+stair[2]);
for(int i=3; i<N; i++){
dp[i] = max(dp[i-2]+stair[i], stair[i-1]+stair[i]+dp[i-3]);
}
cout << dp[N-1];
return 0;
}
아직 Memoization을 제대로 이해하지 못한 탓에, 필수적인 조건문을 세우기가 어렵다.
남의 것을 보며 공부하는 한이 있어도 지식을 내 것으로 만들도록 노력해야겠다.
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
#2960번 에라토스테네스의 체 (C++) (0) | 2020.05.20 |
---|---|
#1463번 1로 만들기 (C++) (0) | 2020.05.20 |
#1149번 RGB거리 (C++) (0) | 2020.04.29 |
#9461번 파도반 수열 (C++) (0) | 2020.04.28 |
#1904번 01타일 (C++) (0) | 2020.04.23 |