[λ°±μ€] 2579 κ³λ¨ μ€λ₯΄κΈ° DP
λ¬Έμ :
https://www.acmicpc.net/problem/2579
2579λ²: κ³λ¨ μ€λ₯΄κΈ°
κ³λ¨ μ€λ₯΄κΈ° κ²μμ κ³λ¨ μλ μμμ λΆν° κ³λ¨ κΌλκΈ°μ μμΉν λμ°©μ κΉμ§ κ°λ κ²μμ΄λ€. <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ κ°κ°μ κ³λ¨μλ μΌμ ν μ μκ° μ°μ¬ μλλ° κ³λ¨μ λ°μΌλ©΄ κ·Έ κ³λ¨μ μ°μ¬ μλ μ
www.acmicpc.net
λΆμ :
κ³λ¨μ΄ μμ μ κ³λ¨μ μ€λ₯΄λλ° κ·μΉμ΄ μλ€ --> μ νμμ΄κ΅°
- κ³λ¨μ ν λ²μ ν κ³λ¨μ© λλ λ κ³λ¨μ© μ€λ₯Ό μ μλ€. μ¦, ν κ³λ¨μ λ°μΌλ©΄μ μ΄μ΄μ λ€μ κ³λ¨μ΄λ, λ€μ λ€μ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€.
- μ°μλ μΈ κ°μ κ³λ¨μ λͺ¨λ λ°μμλ μ λλ€. λ¨, μμμ μ κ³λ¨μ ν¬ν¨λμ§ μλλ€.
- λ§μ§λ§ λμ°© κ³λ¨μ λ°λμ λ°μμΌ νλ€.
stairArr [i] = iλ²μ§Έ κ³λ¨μ κ°
d [i] = iλ²μ§Έ κ³λ¨κΉμ§ λ°μμλ μ΄ κ³λ¨μ μ΅λ κ°
1λ²μ§Έ κ³λ¨μ λ°μμλ μ΅λ κ°μ κ³λ¨μ λ°μμΌ νλ€ --> d[0] = stairArr[0]
2λ²μ§Έ κ³λ¨μ λ°μμλ μ΅λ κ°μ λ κ³λ¨μ λͺ¨λ λ°μμΌ νλ€ -> d[1] = stairArr[0] + stairArr[1]
3λ²μ§Έ κ³λ¨μ λ°μμλ μ΅λ κ°μ 3λ²μ§Έ κ³λ¨μ λ°κ³ 1, 2 μ€ νλμ κ³λ¨λ§μ λ°μμΌ νλ€ -> max(stairArr[0], stairArr[1]) + stairArr[2]
λ°λΌμ μ νμμ
λ§μ§λ§ κ³λ¨μ λ°μμλ μ μ κ³λ¨κΉμ§μ μ΅λ κ°κ³Ό // λ§μ§λ§ κ³λ¨μ λ°μμ λ μ μ μ κ³λ¨κΉμ§μ μ΅λ κ° + μ μ κ³λ¨μ κ°μΌλ‘ μ 리ν μ μλ€.
λ°λΌμ !!
d[i] = max(d[i - 3] + stairArr[i - 1] + stairArr[i], d[i - 2] + stairArr[i])
κ° λλ€.
c++ νμ΄ :
//
// 2579_stairUp.cpp
// SOMAπ©π»π»
//
// Created by JoSoJeong on 2021/06/13.
//
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int Tcase;
int stairArr[301] = {0, };
int d[10001] = {0, };
int find_best_DP(){
int answer = 0;
d[0] = stairArr[0];
d[1] = stairArr[0] + stairArr[1];
d[2] = max(stairArr[0], stairArr[1]) + stairArr[2];
for(int i = 3; i < Tcase; i++){
//μ μ μ κ³λ¨κΉμ§ μ΅λ κ° + μ κ³λ¨ + λ§μ§λ§ κ³λ¨, μ μ κ³λ¨κΉμ§μ μ΅λ κ° + λ§μ§λ§ κ³λ¨
d[i] = max(d[i - 3] + stairArr[i - 1] + stairArr[i], d[i - 2] + stairArr[i]);
}
answer = d[Tcase - 1];
return answer;
}
int main(){
cin >> Tcase;
for(int i = 0; i < Tcase; i++){
cin >> stairArr[i];
}
cout << find_best_DP() << '\n';
return 0;
}