티스토리 뷰

문제


출처 : https://www.acmicpc.net/problem/2579


풀이과정


DP[i] 를 i번째 계단을 밟을 경우 최대로 얻을 수 있는 점수라고 한다.

3번째 계단일 경우에는 2, 3번째 계단을 밟을 경우와 1, 3번째 계단을 밟을 경우를 비교하여 큰 값을 저장한다.

4번째 이후로는 현재 계단만 밟을 경우와 현재, 이전 계단을 밟을 경우를 비교하여 큰 값을 저장한다.


소스코드


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
#include <iostream>
#include <algorithm>
 
using namespace std;
int DP[301], stair[301];
 
int main()
{
    int n;
 
    cin >> n;
 
    for (int i = 1; i <= n; i++)
    {
        cin >> stair[i];
    }
 
    for (int i = 1; i <= n; i++)
    {
        if (i != 3) DP[i] = DP[i - 1+ stair[i];
        else // 3번째 계단일 경우
            DP[i] = max(DP[i - 2+ stair[i], stair[i-1+ stair[i]);
 
        if (i >= 4// 4번째 이상 계단일 경우
            DP[i] = max(stair[i] + DP[i - 2], stair[i] + stair[i - 1+ DP[i - 3]); // 현재 계단만 밟을 경우와 현재,이전 계단 밟을 경우 비교
 
    }
 
    cout << DP[n];
 
    return 0;
}
 
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함