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

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

3의 열차

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

요약
1, 2와 3에 2의 거듭제곱을 곱한 수로 이루어진 배열에서 규칙에 따라 이웃한 짝을 합쳐 만들 수 있는 가장 큰 수를 구합니다.
난이도

어려움10점 중 8점

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

문제

Threes!는 iOS와 Android 등에서 즐길 수 있는 퍼즐 게임이다. 규칙은 단순하지만 그 안의 구조는 깊다. 이웃한 수를 맞춰 합치는 일을 반복해서 더 큰 수를 만들어 나간다. 여기서는 이 게임을 단순하게 바꾼 버전을 다룬다.

게임은 수 NN개로 이루어진 배열에서 시작한다. 각 수는 11이거나 22이거나, i≥0i \ge 0인 정수 ii에 대해 3×2i3 \times 2^i 꼴이다.

이웃한 두 수가 서로 맞으면 하나로 합쳐서 더 큰 수를 만들 수 있다. 이웃한 11과 22는 합쳐서 33 하나가 된다. 이웃한 33 두 개는 66 하나가 되고, 이웃한 66 두 개는 1212 하나가 되며, 일반적으로 33 이상인 같은 수 두 개가 이웃해 있으면 두 수의 합 하나로 합칠 수 있다. 11과 22는 특별하다. 11은 22하고만 맞고, 22는 11하고만 맞는다.

게임의 목표는 만들 수 있는 가장 큰 수를 만드는 것이다. 이웃한 두 수를 더 이상 합칠 수 없게 되면 게임이 끝난다. 예를 들어 배열 {12,24,6,1,2,3,12,3,3,6,1,2,2,1,24}\{12, 24, 6, 1, 2, 3, 12, 3, 3, 6, 1, 2, 2, 1, 24\}에서 시작하면 만들 수 있는 가장 큰 수는 4848이다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤10001 \le T \le 1000). 이어서 2T2T개의 줄이 주어진다. 각 테스트 케이스의 첫 줄에는 배열의 크기 NN이 주어진다 (1≤N≤100001 \le N \le 10000). 그다음 줄에는 정수 NN개가 주어지며, 각 정수는 11, 22, 또는 0≤i≤110 \le i \le 11인 정수 ii에 대해 3×2i3 \times 2^i 꼴이다.

출력

테스트 케이스 TT개 각각에 대해 만들 수 있는 가장 큰 수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3
    5
    1 2 2 2 2
    6
    24 12 6 3 2 1
    4
    3 3 3 3
    
    예상 출력
    3
    48
    12
    
  2. 예제 2

    입력
    1
    15
    12 24 6 1 2 3 12 3 3 6 1 2 2 1 24
    
    예상 출력
    48