-
[C++] BOJ 2579번: 계단 오르기프로그래밍/알고리즘 PS 2020. 12. 8. 09:57
문제 풀이
DP를 이용하여 문제를 해결하였다. N번째 계단을 한 번 밟았을 때의 최대 점수를 dp1, 두 번 밟았을 때를 dp2에 저장하고 해당 칸을 밟았을 때의 최대 점수를 dp에 저장하였다.
코드
#include <iostream> using namespace std; int dp1[400]; // 계단 한 번 밟기 int dp2[400]; // 계단 두 번 밟기 int dp[400]; int scores[400]; int N; int main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for (int i = 1; i <= N; i++) cin >> scores[i]; dp1[1] = scores[1]; dp2[1] = 0; dp[1] = scores[1]; dp1[2] = scores[2]; dp2[2] = scores[1] + scores[2]; dp[2] = scores[1] + scores[2]; for (int i = 3; i <= N; i++) { dp1[i] = dp[i - 2] + scores[i]; dp2[i] = dp1[i - 1] + scores[i]; dp[i] = max(dp1[i], dp2[i]); } cout << dp[N] << '\n'; return 0; }'프로그래밍 > 알고리즘 PS' 카테고리의 다른 글
[C++] BOJ 1629번: 곱셈 (0) 2024.03.28 [C++] BOJ 1699번: 제곱수의 합 (0) 2020.12.08 [C++] BOJ 1912번: 연속합 (0) 2020.12.01 [C++] BOJ 11053번: 가장 긴 증가하는 부분 수열, 11055번: 가장 큰 증가 부분 수열,. 11722번: 가장 긴 감소하는 부분 수열 (0) 2020.11.30 [C++] BOJ 2156번: 포도주 시식 (0) 2020.11.27