안녕하세요. 오늘은 스위치를 누를 거예요.
https://www.acmicpc.net/problem/30460
mx[i]를 i번째까지 고려했을 때의 최댓값으로 정의합시다.
그러면 mx[i]는 mx[i-1]에 자기자신을 더하거나 mx[i-3]에 (arr[i-2]+arr[i-1]+arr[i])*2를 더한값중 최댓값이 됩니다.
#include <iostream>
#include <algorithm>
using namespace std;
int mx[202020] = { 0 }, arr[202020] = { 0 };
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
int N, i, first = 0, second = 0, now;
cin >> N;
for (i = 1; i <= N + 2; i++) //맨 마지막 스위치까지 고려해주기
{
mx[i] = -2e9;
if (i <= N) cin >> arr[i];
else arr[i] = 0;
if (i >= 3) mx[i] = max(mx[i], mx[i - 3] + (arr[i - 2] + arr[i - 1] + arr[i]) * 2); //두배
mx[i] = max(mx[i], mx[i - 1] + arr[i]);
}
cout << mx[N + 2];
}
감사합니다.