이번 문제는 다이나믹 프로그래밍을 응용하여 해결하였다. 처음에는 하나의 수를 제거할 수 있다는 점에서 단순하게 cnt라는 변수를 0으로 두고, dp[i]>dp[i]+arr[i+1]일 때 cnt를 1 증가시켜 하나의 수를 제거한 것으로 처리를 하였다. 의도한 내용은 잘 작동하였지만 주어진 예제 10, -4, 3, 1, 5, 6, -35, 12, 21, -1
에서 3, 1, 5, 6, 12, 21
의 합이 결과로 도출되었다. 이를 두고 생각해보니 10에서 -4로 넘어갈 때 cnt가 증가하였기 때문에 -35에서 끝나버리게 되고, 3에서 시작하면 -35를 빼고 21까지 더해지는 결과가 나온다는 것을 깨달았다. 고민 끝에 dp를 2차원 배열로 하여 처리하기로 하였다.
n=int(input())
arr=list(map(int, input().split()))
dp= [[0, 0] for i in range(n)]
dp[0]=[arr[0], -999999999]
answer=-999999999
for i in range(1, n):
dp[i][0]=max(dp[i-1][0]+arr[i], arr[i])
dp[i][1]=max(dp[i-1][0], dp[i-1][1]+arr[i])
for i in range(n):
answer=max(answer, max(dp[i]))
print(answer)