그리고, 몇 개나 있을까?

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

요약
네 가지 색의 원판이 층층이 쌓여 있을 때, 위가 덮이지 않은 같은 색 원판 두 개를 없애는 연산을 반복해 제거할 수 있는 최대 개수를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 기하, 정렬
정답자
아직 제출이 없습니다

문제

솔로 플레이 게임을 만드는 유명한 제작자 솔리타리우스(Solitarius) 씨는 거의 매일 새로운 아이디어를 떠올린다. 그의 최신 게임에는 색과 크기가 제각각인 원판이 쓰인다.

게임을 시작할 때, 모든 원판은 탁자 중앙 부근에 무작위로 흩어져 있다. 게임을 진행하는 동안, 위에 아무 원판도 얹혀 있지 않은 같은 색 원판 두 개를 골라 함께 없앨 수 있다. 단, 두 원판이 서로 바깥쪽에서 접하기만 하는 경우에는 한쪽이 다른 쪽 위에 얹혀 있다고 보지 않는다.

탁자 위의 원판 일곱 개

예를 들어 위 그림에서는 먼저 검은색 원판 두 개를 없앨 수 있고, 그러고 나면 흰색 원판 두 개를 없앨 수 있게 된다. 반면 회색 원판 두 개는 끝내 없앨 수 없다.

원판들의 색, 크기, 처음 놓인 위치가 주어질 때, 없앨 수 있는 원판의 최대 개수를 구하는 프로그램을 작성하라.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 원판을 모두 흩뿌린 직후의 게임 상태를 다음 형식으로 나타낸다.

n
x1 y1 r1 c1
x2 y2 r2 c2
...
xn yn rn cn

첫 줄에는 원판의 개수를 나타내는 양의 정수 nn이 주어진다. 이어지는 nn개의 줄에는 각각 공백으로 구분된 정수 네 개가 주어지며, 하나의 원판을 나타낸다.

  • (xi,yi)(x_i, y_i)는 ii번째 원판의 중심 좌표, rir_i는 반지름, cic_i는 색 번호이다.
  • ii번째 원판이 jj번째 원판 위에 얹혀 있을 때에는 항상 i<ji < j가 성립한다.

색 번호는 모두 11 이상 44 이하의 정수이며, 한 데이터셋에서 같은 색인 원판은 많아야 66개이다. 모든 중심 좌표는 00 이상 100100 이하, 모든 반지름은 11 이상 100100 이하이다.

입력의 끝은 00 하나만 있는 줄로 나타낸다.

출력

각 데이터셋마다, 없앨 수 있는 원판의 최대 개수를 정수 하나로 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    4
    0 0 50 1
    0 0 50 2
    100 0 50 1
    0 0 100 2
    7
    12 40 8 1
    10 40 10 2
    30 40 10 2
    10 10 10 1
    20 10 9 3
    30 10 8 3
    40 10 7 3
    2
    0 0 100 1
    100 32 5 1
    0
    
    예상 출력
    2
    4
    0