본문 바로가기

problem solving

2579번: 계단 오르기

10번이 넘는 실패를 겪었다.

dp문제는 정말 너무 사악하다.

얼마나 많이 풀어봐야 적응할 수 있을까?...

#include <iostream>
#include <vector>
#include <algorithm>
 
long long dp[310= { 0 };
 
int main(void) {
    int len;
    std::cin >> len;
 
    std::vector<int> val;
    for (int i = 0; i < len; i++) {
        int temp;
        std::cin >> temp;
        val.push_back(temp);
    }
 
    //std::reverse(val.begin(), val.end());
    
    if (val.size() > 2) { 
        dp[0= val[0];
        dp[1= val[0+ val[1];
        dp[2= val[1+ val[2> val[0+ val[2] ? val[1+ val[2] : val[0+ val[2];
    }
    else {
        for (int i = 0; i < val.size(); i++) {
            dp[val.size() - 1+= val[i];
        }
    }
    for (int i = 3; i < len; i++) {
        dp[i] = dp[i - 2+ val[i] > dp[i - 3+ val[i] + val[i - 1] ? dp[i - 2+ val[i] : dp[i - 3+ val[i] + val[i - 1];
    }
 
    std::cout << dp[len - 1<< "\n";
    return 0;
}
cs

'problem solving' 카테고리의 다른 글

2667번: 단지번호붙이기  (0) 2020.03.02
[미해결]2632번: 피자판매  (0) 2020.03.01
2331번: 반복수열  (0) 2020.03.01
2089번: -2진수  (0) 2020.02.27
2004번: 조합 0의 개수  (0) 2020.02.25