반응형
https://www.acmicpc.net/problem/13398
문제 해결 알고리즘
한 칸 넘은 경우와 넘지 않은 경우 두 가지 배열을 다이나믹 프로그래밍을 한다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100001;
int arr[MAX], dp[MAX][2];
int main(){
int n; cin >> n;
for(int i=1;i<=n;i++) {
cin >> arr[i];
dp[i][0] = dp[i][1] = -1001;
}
dp[1][0] = arr[1];
for(int i=2;i<=n;i++){
dp[i][0] = max(dp[i-1][0] + arr[i], arr[i]);
dp[i][1] = max(dp[i-2][0] + arr[i], dp[i-1][1] + arr[i]);
}
int result = INT_MIN;
for(int i=1;i<=n;i++) result = max(result, max(dp[i][0], dp[i][1]));
cout << result;
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[다익스트라] BOJ 1719 택배 (2) | 2023.02.05 |
---|---|
[DP] BOJ 11054 가장 긴 바이토닉 부분 수열 (C++) (0) | 2022.10.26 |
[그리디] BOJ 12931 두 배 더하기 (C++) (0) | 2022.10.20 |
[0-1 BFS] BOJ 1261 알고스팟 (C++) (0) | 2022.10.17 |
[0-1 BFS] BOJ 13549 숨바꼭질 3 (C++) (0) | 2022.10.14 |