티스토리 뷰
안녕하세요? 코딩충입니다.
오늘 풀이할 문제는 2579 계단 오르기 입니다.
전형적인 점화식 DP의 형태이고요 KOI 기출이라서 소개 하려고 합니다.
문제를 딱 보면 눈에 띄이는 문장은 규칙#1 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 입니다.
하지만 규칙#2를 보면 왜 이 문제가 정답률이 30%대인지 알 수 있습니다.
연속해서 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 | #include <iostream> #include <string.h> #include <algorithm> using namespace std; int N, a[302], d[302][5]; int f(int n, int m) { if (m >= 3)return -100001; if (n == N)return a[n]; if (n > N)return -100001; if (d[n][m] != -1)return d[n][m]; d[n][m] = f(n + 1, m + 1) + a[n]; d[n][m] = max(f(n + 2, 1) + a[n], d[n][m]); return d[n][m]; } int main() { scanf("%d", &N); memset(d, -1, sizeof(d)); for (int i = 1; i <= N; i++) { scanf("%d", &a[i]); } printf("%d", f(0,0)); return 0; } | cs |
- D[n] = D[n - 1] + D[n - 2], D[0] = D[1] = 1 [본문으로]
'백준 문제 풀이' 카테고리의 다른 글
[백준 문제 풀이] 17174번 전체 계산 횟수 풀이 (0) | 2019.05.08 |
---|---|
[백준 문제 풀이] 6757번 팰린드롬 진수 (2) | 2017.10.27 |
[백준 문제 풀이] 백준 10828 스택 (4) | 2017.09.02 |