티스토리 뷰
문제
출처 : 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 |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2631번 줄세우기 (0) | 2017.12.06 |
---|---|
[백준] 11055번 가장 큰 증가 부분 수열 (0) | 2017.12.05 |
[백준] 2156번 포도주 시식 (0) | 2017.11.30 |
[백준] 9095번 1, 2, 3 더하기 (0) | 2017.11.30 |
[백준] 10164번 격자상의 경로 (0) | 2017.11.29 |