백준

백준 2579 계단 오르기, c++

2024. 3. 9. 23:10

 

 

 

작성한 코드는 다음과 같다.

max(dp[i-2], dp[i-3]+arr[i-1]) + arr[i]; 가 되는 이유:

ex. dp[4]를 구할 때 2,3,4인 경우가 이어서 건너게 되면 안되므로

i=2 에서 4로 가거나, i=1,3을 건너 4로 가는 경우로 고려해 주어야 함.

(i=3에서 4로 가는 경우로 하면 안됨, 2,3,4연속해서 가는 경우가 포함될 수 있음)

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int n;
    cin >> n;
    
    int arr[n+1];
    for(int i=1; i<=n; i++)
        cin >> arr[i];
    
    int dp[n+1] = {0,};
    dp[1] = arr[1];
    dp[2] = arr[1]+arr[2];
    dp[3] = max(arr[1]+arr[3], arr[2]+arr[3]);
    for(int i=4; i<=n; i++){
        dp[i] = max(dp[i-2], dp[i-3]+arr[i-1]) + arr[i];
    }
    
    cout << dp[n];
    return 0;
}

 

 

 

 

 

'백준' 카테고리의 다른 글

백준 1912 연속합, c++  (0) 2024.03.10
백준 11727 2xn 타일링 2, c++  (0) 2024.03.10
백준 1965 상자넣기, c++  (0) 2024.03.09
백준 2290 LCD Test, c++  (0) 2024.03.08
백준 16506 CPU, c++  (1) 2024.03.07