아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

흥미로운 분할

시간 제한2.5초메모리 제한1024 MB

요약
배열을 정확히 k개의 연속 부분 배열로 나눌 때 각 부분 배열의 최댓값을 더한 비용의 최솟값과 최댓값을 k = 1부터 N까지 모두 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 분할 정복, 스택, 배열
정답자
아직 제출이 없습니다

문제

배열의 부분배열이란 배열의 연속한 일부를 말한다. 배열을 부분배열로 분할한다는 것은 배열 전체를 겹치지 않게 덮는 부분배열들의 모임을 뜻한다. 즉 배열의 각 원소는 정확히 하나의 부분배열에 속한다. 예를 들어 배열 A = [3, 1, 4, 1, 5]에 대해 [3, 1, 4]와 [1, 5]는 A의 부분배열 분할이지만, [3, 4, 5]는 A의 부분배열이 아니다.

정수 배열과 그 배열을 공집합이 아닌 부분배열로 나눈 분할이 주어졌을 때, 각 부분배열의 비용은 그 부분배열의 최댓값으로 정의하고, 분할 전체의 비용은 각 부분배열 비용의 합으로 정의한다.

예를 들어 배열 [3, 5, 7, 1, 2, 4]를 생각하자. 부분배열 [3, 5], [7], [1, 2, 4]로 이루어진 분할의 비용은 5 + 7 + 4 = 16이고, 부분배열 [3], [5, 7, 1], [2, 4]로 이루어진 분할의 비용은 3 + 7 + 4 = 14이다. 두 분할 모두 k = 3개의 부분배열로 이루어져 있지만 비용은 다르다. 다른 분할들은 또 다른 비용을 가질 수 있다.

N개의 정수로 이루어진 배열 A와 1 ≤ k ≤ N인 정수 k가 주어졌을 때, A를 공집합이 아닌 k개의 부분배열로 나누는 모든 분할의 집합 P(A, k)를 생각하자. P(A, k)에서의 최소 비용을 구할 수 있는가? 최대 비용도 구할 수 있는가? 모든 k에 대해? 그렇다면 해 보자.

입력

첫째 줄에 배열 A의 원소 개수 N (1 ≤ N ≤ 8000)이 주어진다. 둘째 줄에 배열을 나타내는 N개의 정수 A1, A2, . . . , AN (1 ≤ Ai ≤ 109, i = 1, 2, . . . , N)이 주어진다.

출력

N개의 줄을 출력한다. k번째 줄에는 P(A, k)에서의 최소 비용과 최대 비용을 나타내는 두 정수를 순서대로 출력한다.

예제2

  1. 예제 1

    입력
    6
    3 5 7 1 2 4
    
    예상 출력
    7 7
    10 12
    12 16
    14 19
    17 21
    22 22
    
  2. 예제 2

    입력
    4
    1 1 1 1
    
    예상 출력
    1 1
    2 2
    3 3
    4 4