처음에 번째였던 원소를 마지막까지 남긴다고 하자. 그 원소의 왼쪽에서는 개가 삭제되고, 오른쪽에서는 개가 삭제된다. 따라서 마지막 값은 삭제 순서와 관계없이
이다.
모든 위치 에 대해 이 값을 계산하고 최댓값을 구한다. 원소를 입력받을 때 바로 계산하여 현재까지의 최댓값만 저장하면 된다. 한 케이스의 시간 복잡도는 , 추가 공간 복잡도는 이다.
증명
하나의 원소를 끝까지 남기는 동안 다른 원소들과의 상대적인 순서는 변하지 않는다. 처음에 그 원소의 왼쪽에 있던 원소는 삭제될 때 그 값을 감소시키고, 오른쪽에 있던 원소는 삭제될 때 그 값을 증가시킨다. 나머지 원소는 각각 정확히 한 번 삭제되므로, 처음 번째였던 원소의 최종 값은 항상 이다.
서브태스크 에서는 현재 수열에서 삭제할 원소를 모두 시도하는 완전탐색으로 가능한 마지막 값을 조사할 수 있다. 수열을 직접 변경한 뒤 재귀 호출에서 돌아올 때 원래대로 복구하면 시간 복잡도는 , 수열과 재귀 호출에 필요한 공간 복잡도는 이다.
서브태스크 에서는 마지막에 남길 원소를 하나씩 정하고, 다른 각 원소가 삭제될 때의 변화량을 하나씩 더한다. 시간 복잡도는 이며, 수열을 저장하므로 공간 복잡도는 이다.
어떤 삭제 순서를 선택하더라도 마지막 원소는 처음 수열의 어느 위치에서 온 원소이므로, 최종 값은 위 식들의 최댓값을 넘을 수 없다. 반대로 이 식이 최대인 위치를 하나 고르고 그 원소를 제외한 모든 원소를 삭제하면 해당 값을 얻는다. 따라서 위 식의 최댓값이 정답이다.
서브태스크 에서는 이므로 는 위치가 한 칸 오른쪽으로 이동할 때마다 적어도 감소한다. 따라서 첫 번째 원소를 남기는 것이 최적이며, 답은 이다. 입력을 읽는 시간까지 포함한 시간 복잡도는 , 추가 공간 복잡도는 이다.
Solution written by GPT6