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

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

Bob 돕기

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

요약
최대 15개의 피자에 가격과 넓이, 다른 피자를 사면 생기는 중첩 할인 쿠폰이 주어질 때, 어떤 순서로든 일부를 살 때 총 가격을 총 넓이로 나눈 값의 최솟값을 구한다.
난이도

보통10점 중 7점

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

문제

Bob은 피자를 매우 좋아하지만 항상 돈이 부족하다. 어느 날 그는 자신이 가장 좋아하는 식당인 Alfredo's Pizza Restaurant가 대회를 연다는 소식을 읽는다. 각 피자를 최대 한 번 살 수 있을 때 얻을 수 있는 단위 넓이당 최저 가격을 가장 먼저 알려 주는 사람에게 큰 피자를 준다는 것이다.

"쉽네!"라고 Bob은 생각한다. "피자마다 가격을 넓이로 나눈 뒤 가장 작은 값을 고르면 되잖아." 하지만 문제는 조금 더 까다롭다. 일부 피자는 다른 피자에 쓸 수 있는 할인 쿠폰을 함께 주며, 이 쿠폰들은 겹쳐서 함께 적용할 수 있다. 피자는 한 번에 하나씩 차례로 사야 하고, 쿠폰은 아직 사지 않은 피자에만 사용할 수 있다. 이미 산 피자에 할인을 소급 적용할 수는 없다.

당신은 비어 있지 않은 어떤 피자 집합을 사고(각각 최대 한 번) 각 피자의 할인된 가격을 지불한다. 이 구매의 단위 넓이당 가격은 지불한 총 가격을 산 피자들의 총 넓이로 나눈 값이다. Bob이 얻을 수 있는 최소 단위 넓이당 가격을 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 Alfredo가 제공하는 피자의 수를 나타내는 정수 mm (1≤m≤151 \le m \le 15)으로 시작한다. 입력은 m=0m = 0인 줄로 끝나며, 이 줄은 처리하지 않는다.

그다음 mm개의 줄이 이어진다. ii번째 줄(1≤i≤m1 \le i \le m)은 피자 ii를 설명하며 세 정수 pip_i, aia_i, nin_i로 시작한다. 각각 피자의 가격(1≤pi≤100001 \le p_i \le 10000), 넓이(1≤ai≤100001 \le a_i \le 10000), 그 피자를 살 때 받는 할인 쿠폰의 수(0≤ni<m0 \le n_i < m)이다. 이어서 nin_i개의 정수 쌍 xi,jx_{i,j}와 yi,jy_{i,j}가 온다. 피자 ii를 사면 피자 xi,jx_{i,j} (1≤xi,j≤m1 \le x_{i,j} \le m, xi,j≠ix_{i,j} \ne i)에 대해 yi,jy_{i,j} 퍼센트(1≤yi,j≤501 \le y_{i,j} \le 50)를 할인해 주는 쿠폰을 받는다. 각 ii에 대해 xi,jx_{i,j} 값들은 서로 다르다.

출력

각 테스트 케이스마다 얻을 수 있는 최저 단위 넓이당 가격을 한 줄에 출력한다. 이는 비어 있지 않은 모든 구매 피자 집합과 모든 구매 순서에 대해 (지불한 총 가격) / (산 총 넓이)의 최솟값이다. 이 값을 소수점 아래 넷째 자리까지 반올림하여 출력한다.

쿠폰은 곱셈으로 겹쳐진다. 예를 들어 기본 가격이 10인 피자가 구매 전에 50 퍼센트 쿠폰과 20 퍼센트 쿠폰을 받았다면 10×0.5×0.8=410 \times 0.5 \times 0.8 = 4만 지불하면 된다.

예제2

  1. 예제 1

    입력
    1
    80 30 0
    2
    200 100 1 2 50
    200 100 0
    5
    100 100 2 3 50 2 50
    100 100 1 4 50
    100 100 1 2 40
    600 600 1 5 10
    1000 10 1 1 50
    0
    
    예상 출력
    2.6667
    1.5000
    0.5333
    
  2. 예제 2

    입력
    1
    7 3 0
    0
    
    예상 출력
    2.3333