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

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

수열 합치기

시간 제한1초메모리 제한128 MB

요약
인접한 두 수를 큰 값으로 합치고 그 값을 비용으로 지불하는 과정을 반복해 전체 비용이 가장 작아지는 순서를 구합니다.
난이도

보통10점 중 7점

유형
분할 정복, 스택, 그리디
정답자
아직 제출이 없습니다

문제

수열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. 한 번의 연산에서 인접한 두 수 aia_i와 ai+1a_{i+1}을 골라 그 두 수를 max⁡(ai,ai+1)\max(a_i, a_{i+1}) 하나로 바꿀 수 있고, 이때 드는 비용은 max⁡(ai,ai+1)\max(a_i, a_{i+1})이다. 연산을 한 번 하면 수열의 길이가 1 줄어들므로 n−1n-1번 하면 길이가 1이 된다.

수열이 주어졌을 때, 길이 1로 만드는 데 드는 최소 비용을 구하는 프로그램을 작성하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤1000001 \le T \le 100000)

각 테스트 케이스는 두 줄이다. 첫째 줄에 수열의 길이 NN이 주어진다. (2≤N≤50002 \le N \le 5000) 둘째 줄에 수열을 이루는 NN개의 정수가 공백 한 개로 구분되어 주어진다. 각 정수는 11 이상 100000100000 이하다.

출력

각 테스트 케이스마다 한 줄에 Case #x: R 형식으로 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, RR은 그 수열을 길이 1로 만드는 최소 비용이다.

예제1

  1. 예제 1

    입력
    10
    6
    15 9 8 13 19 17
    7
    12 15 13 8 12 9 7
    8
    8 12 14 10 14 18 15 13
    9
    12 8 3 1 1 1 5 4 7
    8
    1 6 4 3 2 4 1 6
    8
    15 16 15 10 18 22 19 22
    9
    14 9 14 17 21 23 18 17 14
    8
    13 12 11 5 1 1 6 1
    6
    8 4 2 1 1 1
    8
    9 11 12 8 10 11 6 9
    
    예상 출력
    Case #1: 75
    Case #2: 76
    Case #3: 105
    Case #4: 42
    Case #5: 33
    Case #6: 131
    Case #7: 147
    Case #8: 54
    Case #9: 16
    Case #10: 76