Bob 돕기
시간 제한1초메모리 제한128 MB
최대 15개의 피자에 가격과 넓이, 다른 피자를 사면 생기는 중첩 할인 쿠폰이 주어질 때, 어떤 순서로든 일부를 살 때 총 가격을 총 넓이로 나눈 값의 최솟값을 구한다.
문제
Bob은 피자를 매우 좋아하지만 항상 돈이 부족하다. 어느 날 그는 자신이 가장 좋아하는 식당인 Alfredo's Pizza Restaurant가 대회를 연다는 소식을 읽는다. 각 피자를 최대 한 번 살 수 있을 때 얻을 수 있는 단위 넓이당 최저 가격을 가장 먼저 알려 주는 사람에게 큰 피자를 준다는 것이다.
"쉽네!"라고 Bob은 생각한다. "피자마다 가격을 넓이로 나눈 뒤 가장 작은 값을 고르면 되잖아." 하지만 문제는 조금 더 까다롭다. 일부 피자는 다른 피자에 쓸 수 있는 할인 쿠폰을 함께 주며, 이 쿠폰들은 겹쳐서 함께 적용할 수 있다. 피자는 한 번에 하나씩 차례로 사야 하고, 쿠폰은 아직 사지 않은 피자에만 사용할 수 있다. 이미 산 피자에 할인을 소급 적용할 수는 없다.
당신은 비어 있지 않은 어떤 피자 집합을 사고(각각 최대 한 번) 각 피자의 할인된 가격을 지불한다. 이 구매의 단위 넓이당 가격은 지불한 총 가격을 산 피자들의 총 넓이로 나눈 값이다. Bob이 얻을 수 있는 최소 단위 넓이당 가격을 구하라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 Alfredo가 제공하는 피자의 수를 나타내는 정수 ()으로 시작한다. 입력은 인 줄로 끝나며, 이 줄은 처리하지 않는다.
그다음 개의 줄이 이어진다. 번째 줄()은 피자 를 설명하며 세 정수 , , 로 시작한다. 각각 피자의 가격(), 넓이(), 그 피자를 살 때 받는 할인 쿠폰의 수()이다. 이어서 개의 정수 쌍 와 가 온다. 피자 를 사면 피자 (, )에 대해 퍼센트()를 할인해 주는 쿠폰을 받는다. 각 에 대해 값들은 서로 다르다.
출력
각 테스트 케이스마다 얻을 수 있는 최저 단위 넓이당 가격을 한 줄에 출력한다. 이는 비어 있지 않은 모든 구매 피자 집합과 모든 구매 순서에 대해 (지불한 총 가격) / (산 총 넓이)의 최솟값이다. 이 값을 소수점 아래 넷째 자리까지 반올림하여 출력한다.
쿠폰은 곱셈으로 겹쳐진다. 예를 들어 기본 가격이 10인 피자가 구매 전에 50 퍼센트 쿠폰과 20 퍼센트 쿠폰을 받았다면 만 지불하면 된다.