* Computer Science/Algorithm

baekjun 2579. 계단 오르기

soicem 2018. 8. 2. 13:16

 계단을 오를 때 어디서부터 오를 것인지, 오를 때 3칸 연속 오르면 안되기에 이를 처리해주는 곳만 있다면 해결할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <cstring>
 
#define LOWEST    -3000000
 
using namespace std;
 
int N;
int steps[301];
int cache[302][2];
 
int getMaxStep(int level, int ctn) {
    if (level == N)
        return steps[N];
    if (level > N)
        return LOWEST;
    int locCtn = ctn;
    if (locCtn < 0)
        locCtn = 0;
    int & ret = cache[level][locCtn];
    if (ret != -1)
        return ret;
    ret = 0;
    if (ctn == 1)
        return ret = getMaxStep(level + 20+ steps[level];
 
    return ret = max(getMaxStep(level + 1, ctn + 1), getMaxStep(level + 20)) + steps[level];
}
 
int main() {
    cin >> N;
    memset(cache, -1sizeof(cache));
    steps[0= 0;
    for (int i = 1; i < N + 1; i++)
        cin >> steps[i];
    cout << getMaxStep(0-1<< endl;
    //system("pause");
    return 0;
}
cs


'* Computer Science > Algorithm' 카테고리의 다른 글

baekjun 1005. ACM Craft  (0) 2018.08.06
baekjun 1463. 1로 만들기  (0) 2018.08.02
baekjun 1923. 정수 삼각형  (0) 2018.08.01
baekjun 1149. RGB거리  (0) 2018.08.01
baekjoon 1003. 피보나치 함수  (0) 2018.07.18