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

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

파일 합치기

시간 제한2초메모리 제한256 MB

요약
연속된 장 파일을 두 개씩 합칠 때마다 두 파일 크기 합만큼 비용이 들 때 전체 비용을 최소로 만드는 합병 순서를 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 구간, 누적 합
정답자
아직 제출이 없습니다

문제

소설가 김대전은 소설을 여러 장으로 나누어 쓰고, 각 장을 서로 다른 파일에 저장한다. 모든 장을 다 쓰고 나면 파일을 합쳐 완성본 하나를 만든다. 합치는 방법은 이렇다. 파일 두 개를 합쳐 임시 파일 하나를 만들고, 임시 파일이나 원래 파일을 다시 두 개씩 합쳐 나간다. 합치는 두 파일은 장 번호가 서로 이어져 있어야 하고, 마지막에는 파일이 하나만 남는다. 파일 두 개를 합치는 비용은 두 파일 크기의 합이다.

예를 들어 이어진 네 장을 담은 파일 C1, C2, C3, C4의 크기가 각각 40, 30, 30, 50이라고 하자. 먼저 C2와 C3를 합쳐 임시 파일 X1을 만들면 비용 60이 든다. 이어서 C1과 X1을 합쳐 X2를 만들면 비용 100이 들고, 마지막으로 X2와 C4를 합치면 비용 150이 든다. 이 순서의 총 비용은 60+100+150=31060+100+150=310이다. 순서를 바꾸면 비용이 줄어든다. C1과 C2를 합쳐 Y1을, C3와 C4를 합쳐 Y2를 만든 다음 Y1과 Y2를 합치면 총 비용은 70+80+150=30070+80+150=300이다.

각 장을 담은 파일의 크기가 주어질 때, 파일을 하나로 합치는 데 드는 최소 비용을 구하는 프로그램을 작성하시오.

입력

프로그램은 표준 입력에서 입력 데이터를 받는다. 첫 줄에 테스트 데이터의 개수 TT가 주어진다.

각 테스트 데이터는 두 줄이다. 첫 줄에는 소설을 이루는 장의 수를 나타내는 양의 정수 KK (3≤K≤5003 \le K \le 500)가 주어진다. 둘째 줄에는 1장부터 KK장까지의 파일 크기를 나타내는 양의 정수 KK개가 공백으로 구분되어 주어진다. 파일 크기는 10,000을 넘지 않는다.

출력

프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 줄에, 모든 장을 하나의 파일로 합치는 데 드는 최소 비용을 출력한다.

예제7

  1. 예제 1

    입력
    2
    4
    40 30 30 50
    15
    1 21 3 4 5 35 5 4 3 5 98 21 14 17 32
    
    예상 출력
    300
    864
  2. 예제 2

    입력
    1
    3
    1 1 1
    
    예상 출력
    5
  3. 예제 3

    입력
    1
    3
    10000 1 10000
    
    예상 출력
    30002
  4. 예제 4

    입력
    1
    5
    1 2 3 4 5
    
    예상 출력
    33
  5. 예제 5

    입력
    1
    6
    100 1 1 1 1 100
    
    예상 출력
    316
  6. 예제 6

    입력
    3
    3
    5 6 7
    4
    1 1 1 1
    7
    10000 10000 10000 10000 10000 10000 10000
    
    예상 출력
    29
    8
    200000
  7. 예제 7

    입력
    1
    4
    50 30 30 40
    
    예상 출력
    300