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

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

빚

면접 대비

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

요약
모든 M에 대해 M개 대출을 골라 최대값의 M배에서 합을 뺀 추가액을 최소화하고 그 최솟값들의 합을 구합니다.
난이도

보통10점 중 5점

유형
정렬, 누적 합
정답자
아직 제출이 없습니다

문제

민균이의 별명은 빚쟁이다. 김우현 연구소에서 빌린 돈을 잘 갚지 않는다고 해서 붙은 이름이다.

민균이는 지금까지 NN번 돈을 빌렸고, ii번째로 빌린 금액은 AiA_i다. 김우현 연구소는 돈을 돌려받는 방식이 독특하다.

연구소가 빚을 MM번 갚으라고 명령하면, 민균이는 NN번의 빚 중에서 MM번을 마음대로 고른다. 고른 금액을 B1,B2,…,BMB_1, B_2, \dots, B_M이라고 하면 민균이가 내야 하는 금액은 max⁡(B1,B2,…,BM)×M\max(B_1, B_2, \dots, B_M) \times M이다. 여기서 실제로 빌린 금액의 합을 뺀 나머지를 추가 상환액이라고 하자. 즉 추가 상환액은 max⁡(B1,B2,…,BM)×M−(B1+B2+⋯+BM)\max(B_1, B_2, \dots, B_M) \times M - (B_1 + B_2 + \dots + B_M)이다.

예를 들어 민균이가 세 번에 걸쳐 22, 55, 33을 빌렸고 연구소가 빚을 두 번 갚으라고 명령했다고 하자. 첫 번째와 두 번째를 고르면 내야 하는 금액은 5×2=105 \times 2 = 10이고 추가 상환액은 10−(2+5)=310 - (2 + 5) = 3이다. 첫 번째와 세 번째를 고르면 내야 하는 금액은 3×2=63 \times 2 = 6이고 추가 상환액은 6−(2+3)=16 - (2 + 3) = 1이다.

민균이는 추가 상환액을 최대한 줄이고 싶다. 연구소가 빚을 MM번 갚으라고 명령했을 때 나올 수 있는 추가 상환액의 최솟값을 S(M)S(M)이라고 하자.

N=5N = 5이고 빌린 금액이 차례대로 1,5,4,3,81, 5, 4, 3, 8이면 다음과 같다.

  • S(1)=0S(1) = 0. 무엇을 골라도 추가로 낼 돈이 없다.
  • S(2)=1S(2) = 1. 55와 44를 고르거나 44와 33을 고른다.
  • S(3)=3S(3) = 3. 5,4,35, 4, 3을 고른다.
  • S(4)=7S(4) = 7. 5,4,3,15, 4, 3, 1을 고른다.
  • S(5)=19S(5) = 19. 다섯 번을 모두 고른다.

NN과 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어지면 S(1)+S(2)+⋯+S(N)S(1) + S(2) + \dots + S(N)을 구하라.

입력

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

이어지는 TT개의 줄에는 각각 민균이가 돈을 빌린 횟수 NN (1≤N≤40001 \le N \le 4000)과 빌린 금액 A1,A2,…,ANA_1, A_2, \dots, A_N (1≤Ai≤100001 \le A_i \le 10000)이 공백으로 구분되어 순서대로 주어진다.

출력

각 테스트케이스마다 S(1)+S(2)+⋯+S(N)S(1) + S(2) + \dots + S(N)을 한 줄에 출력한다.

중간 계산값과 답이 32비트 정수 범위를 넘을 수 있으므로 64비트 정수를 써야 한다.

예제2

  1. 예제 1

    입력
    3
    5 1 5 4 3 8
    3 1 2 3
    6 3 4 1 6 8 1
    
    예상 출력
    30
    4
    51
    
  2. 예제 2

    입력
    1
    1 1
    
    예상 출력
    0