-
[백준 2579] 계단 오르기백준/DP 2024. 2. 8. 00:29
제한이 있는 dp는
dp를 점화식으로 계산할때 if로 조건에 맞게 dp값을 찾아주려고 하면 안된다
이 문제는 3개의 계단을 연속으로 오르면 안된다는 조건을 가지고 있는데
이걸 현재 3개를 연속으로 올랐을때랑 안올랐을때를 if문에 넣어서 각 dp값을 구하려고 하면 안됨
그냥 3개 올라갈 수 없다는걸 납득하고
이에 맞는 점화식을 구해주면 됨
dp[0] dp[1] dp[2] 는 이미 값이 정해져 있으므로
dp 돌기전에 미리 초기화 해주고 3부터 계산해주면 됨

그리고 마지막 계단은 무조건 밟아야한다 했으므로
마지막 계단일때의 dp 값을 찾아주면 된다.
#include <iostream> #define SIZE 301 using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int stairs[SIZE] = { 0, }, dp[SIZE]; int N; cin >> N; for (int i = 1; i <= N; i++) cin >> stairs[i]; dp[0] = 0; dp[1] = stairs[1]; dp[2] = stairs[1] + stairs[2]; for (int i = 3; i <= N; i++) { dp[i] = max(dp[i - 3] + stairs[i - 1], dp[i - 2]) + stairs[i]; } cout << dp[N]; return 0; }'백준 > DP' 카테고리의 다른 글
[백준 1535] 안녕 (0) 2024.02.17 [백준 12865] 평범한 배낭 (01 배낭문제) (0) 2024.02.17 [백준 1010] 다리놓기 (nCr문제) (1) 2024.02.07 [백준 2839] 설탕 배달 (2) 2023.07.10 [백준 12847] 꿀 아르바이트 (0) 2023.07.05