728x90
문제
https://www.acmicpc.net/problem/13398
문제 해결
기존의 연속합 문제에서 변형을 하였다.
기존의 연속합 문제 + 제거할 경우를 생각 했다.
제거 dp를 따로 만들어서 저장했고 dp의 값은 전 값을 제거한 값,그냥 전의 dp값을 받는 경우 2가지를 생각해서 두 값의 max값을 넣어 주었다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> #include <algorithm> using namespace std; int main(void){ long long N,ary[100002],dp[100002][2] = {0,}; long long Max; cin >> N; for(int i = 1;i<=N;i++){ cin >> ary[i]; } dp[1][0] = ary[1]; dp[1][1] = ary[1]; Max = ary[1]; for(int i = 2;i<=N;i++){ if(ary[i]>=dp[i-1][0]+ary[i]){ dp[i][0] = ary[i]; Max = max(dp[i][0],Max); } else{ dp[i][0] = dp[i-1][0]+ary[i]; Max = max(dp[i][0],Max); } dp[i][1] = max(dp[i-1][1]+ary[i],dp[i-2][0]+ary[i]); Max = max(dp[i][1],Max); } cout << Max; } | cs |
728x90
'다이나믹 프로그래밍' 카테고리의 다른 글
[백준/C++][LCS(9251번)]-LCS 알고리즘 (0) | 2020.12.19 |
---|---|
[백준/C++][퇴사2(15486번)] (0) | 2020.12.18 |
[백준/C++][퇴사2(15486번)] (0) | 2020.12.17 |
[백준/C++][평범한 배낭(12865번)] (0) | 2020.12.15 |
[백준/C++][점프 점프(11060번)] (0) | 2020.12.14 |