다이나믹 프로그래밍 너무 어렵다..
이런 n번째 ~ 문제들은 점화식을 통해서 접근해보자.
이 문제는 현재 n번쨰 계단의 위치는 n-3번쨰까지의 합에서 n-1, n 계단을 합한 것 or n-2번째 계단까지의 합에서 n번쨰 계단을 합한 것중 최대값을 구하면 된다.
#include <stdio.h>
#include <stack>
#include <algorithm>
#include<iostream>
using namespace std;
int main() {
int n, arr[305] = {}, dp[305] = {};
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &arr[i]);
}
dp[1] = arr[1];
dp[2] = dp[1] + arr[2];
for (int i = 3; i <= n; i++) {
dp[i] = max(dp[i - 2] + arr[i], dp[i - 3] + arr[i] + arr[i - 1]);
}
printf("%d", dp[n]);
}
'Algorithm' 카테고리의 다른 글
백준 9465 스티커 (0) | 2020.03.04 |
---|---|
백준 6588번 골드바흐의 추측 (0) | 2020.03.02 |
백준 2920 음계 (0) | 2020.03.01 |
백준 2745 진법 변환 (0) | 2020.03.01 |
백준 2493 탑 (0) | 2020.02.28 |