https://www.acmicpc.net/problem/2579
두 칸 이상 건너뛸 수 없는 조건 때문에 생각이 안나서 오래 걸렸다 ㅠㅠ
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 | #include<iostream> using namespace std; #define max(a,b) ((a) > (b)) ? (a) :(b) int dp[302]; int step[302]; int main(void) { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> step[i]; } dp[1] = step[1]; dp[2] = step[1] + step[2]; // 각 계단까지의 최대 점수를 구하는 방법 // 두 가지 경우 중 최댓값이 그 계단까지의 최대 점수가 된다. // (1) 현재 계단 밟기, 1 이전 계단 밟기, 2 이전 계단 밟지 않기 // (2) 현재 계단 밟기, 1 이전 계단 밟지 않기, 2 이전 계단 밟기 for (int i = 3; i <= n; i++) { dp[i] = max(step[i] + step[i - 1] + dp[i - 3], step[i] + dp[i - 2]); } printf("%d", dp[n]); return 0; } | cs |
'Problem > DP' 카테고리의 다른 글
[백준알고리즘] 10844번 쉬운 계단 수 (1) | 2018.12.03 |
---|---|
[백준알고리즘] 1003번 피보나치 함수 (0) | 2018.12.02 |
[백준알고리즘] 1520번 내리막 길 (0) | 2018.11.25 |
[백준알고리즘] 2차원 배열의 합 (0) | 2018.11.16 |
[백준알고리즘] 14501번 퇴사 (0) | 2018.11.16 |