팀워크

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

요약
주어진 조각을 각각 한 번만 사용해 같은 길이의 세 묶음으로 나눌 때 가능한 최대 길이를 구하고, 불가능하면 0을 출력합니다.
난이도

보통10점 중 7점

유형
백트래킹, 완전 탐색, 동적 계획법
정답자
아직 제출이 없습니다

문제

어느 프로그래밍 대회 코치는 자기 팀들의 협동심이 부족한 것이 늘 불만이었습니다. 그는 학생들에게 협동의 중요성을 보여 주기 위해 잘 알려진 비유를 쓰기로 했습니다. 막대 하나는 손쉽게 둘로 부러뜨릴 수 있지만, 막대 세 개(즉 한 팀의 세 사람)를 함께 묶으면 부러뜨리는 데 훨씬 큰 힘이 필요하다는 것입니다.

코치는 시범에 쓸 막대를 구하러 숲으로 갔습니다. 시범을 미리 연습해 문제를 없애 두려고, 세 개를 묶으면 사실상 부러뜨릴 수 없고 한 개는 아주 쉽게 부러진다는 것도 확인했습니다. 그런데 애써 모은 막대들이 모두 더 작은 조각들로 부러져 버렸습니다.

코치는 기막힌 방법을 떠올렸습니다. 조각들을 다시 붙여 더 긴 막대를 만드는 것입니다. 어떤 조각이든 다른 조각과, 심지어 원래 다른 막대에서 나온 조각이라도 단단히 붙일 수 있습니다. 따라서 조각을 두 개 이상 이어 붙여 막대를 재구성할 수 있습니다. 다만 이렇게 재구성한 막대는 이어 붙인 지점(연결점)에서 아주 쉽게 부러집니다. 그리고 두 막대가 같은 위치에 연결점을 가지면, 두 막대를 함께 묶어도 그 위치에서 똑같이 쉽게 부러집니다.

그러므로 코치는 세 막대의 연결점이 어느 것도 서로 같은 위치에 있지 않도록 세 막대를 재구성해야 합니다. 또한 재구성한 막대는 가능한 한 길수록 좋으며, 세 막대의 길이는 모두 같아야 합니다(어느 한 사람이 더 낫다는 인상을 주지 않기 위해서입니다). 조각 중 일부는 쓰지 않고 남겨도 됩니다. 물론 각 조각은 한 번만 쓸 수 있습니다.

이 규칙을 만족하면서 세 막대를 재구성할 수 있는 가장 긴 공통 길이를 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 케이스는 한 줄로 주어집니다. 줄의 첫 번째 수는 조각의 개수 NN입니다. 이어지는 NN개의 수는 각 조각의 길이를 나타내는 양의 정수입니다. 조각은 최대 13개이며, 각 조각의 길이는 최대 25입니다. 입력의 끝은 N=0N = 0인 케이스로 표시됩니다.

출력

각 케이스마다 케이스 번호와 콜론, 그리고 재구성한 세 막대의 가능한 가장 긴 길이를 한 줄에 출력하세요(형식: Case X: L). 규칙을 만족하도록 세 막대를 재구성하는 것이 불가능하면 가능한 가장 긴 길이는 0입니다.

예제1

  1. 예제 1

    입력
    10 4 2 3 7 8 9 1 2 3 4
    10 1 2 3 4 5 6 7 8 9 10
    8 2 3 4 1 1 3 2 2
    10 25 25 25 25 25 25 25 25 25 25
    0
    
    예상 출력
    Case 1: 14
    Case 2: 18
    Case 3: 6
    Case 4: 0