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

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

바빌론의 탑

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

요약
무한히 쓸 수 있는 직육면체 블록을 자유롭게 회전해, 아래 블록의 밑변 두 변보다 위 블록의 밑변 두 변이 모두 작아야 한다는 조건 아래 가장 높은 탑의 높이를 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 정렬, 그래프
정답자
아직 제출이 없습니다

문제

바빌로니아 사람들은 nn가지 종류의 블록을 가지고 있으며, 각 종류의 블록은 무한히 공급된다. 종류 ii의 블록은 세 변의 길이가 (xi,yi,zi)(x_i, y_i, z_i)인 직육면체이다. 블록은 회전시켜 세 변 중 임의의 두 변을 밑면으로, 나머지 한 변을 높이로 삼을 수 있다.

이 블록들을 쌓아 가능한 한 높은 탑을 만들려고 한다. 단, 어떤 블록을 다른 블록 위에 올리려면 위쪽 블록 밑면의 두 변의 길이가 아래쪽 블록 밑면의 대응하는 두 변의 길이보다 모두 엄격히 작아야 한다. 따라서 밑면의 크기가 같은 두 블록은 서로 쌓을 수 없다.

주어진 블록들로 만들 수 있는 가장 높은 탑의 높이를 구하는 프로그램을 작성하라.

입력

입력은 하나 이상의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 블록 종류의 수를 나타내는 정수 nn이 주어진다(nn의 최댓값은 30). 이어지는 nn개의 줄에는 각각 세 정수 xix_i, yiy_i, ziz_i가 주어진다.

입력은 nn이 00인 줄로 끝난다.

출력

각 테스트 케이스마다 케이스 번호(1부터 순서대로 매긴다)와 만들 수 있는 가장 높은 탑의 높이를 다음 형식으로 한 줄에 출력한다.

Case c: maximum height = h

예제1

  1. 예제 1

    입력
    1
    10 20 30
    2
    6 8 10
    5 5 5
    7
    1 1 1
    2 2 2
    3 3 3
    4 4 4
    5 5 5
    6 6 6
    7 7 7
    5
    31 41 59
    26 53 58
    97 93 23
    84 62 64
    33 83 27
    0
    
    예상 출력
    Case 1: maximum height = 40
    Case 2: maximum height = 21
    Case 3: maximum height = 28
    Case 4: maximum height = 342