병력 동원

면접 대비

시간 제한2초메모리 제한512 MB

요약
예산 안에서 병종을 소수 단위로 사들여 총 체력과 총 위력의 곱을 최대화합니다.
난이도

보통10점 중 7점

유형
그리디, 수학, 정렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

Mobilization은 병력을 동원하는 새로운 전략 게임이다. 병력은 여러 종류의 부대로 구성할 수 있으며, 각 부대 종류마다 비용, 체력, 전투력이 정해져 있다. 가진 예산을 넘지 않는 선에서 각 부대 종류를 임의의 조합으로, 심지어 소수 단위로도 구매할 수 있다. 병력의 효율은 총 체력과 총 전투력의 곱으로 정의된다. 주어진 예산 제약 아래에서 얻을 수 있는 최대 효율은 얼마인가?

원하는 만큼 구매할 수 있을 정도로 부대가 항상 충분히 남아 있다고 가정해도 된다(총 예산 제약 내에서).

입력

첫 줄에 부대 종류의 수를 나타내는 정수 n(1 ≤ n ≤ 30 000)과 사용할 수 있는 총 예산 b(1 ≤ b ≤ 100 000)가 주어진다.

이어서 n개의 줄에 각 부대 종류의 값 세 개가 주어진다. 부대 하나당 비용 c(1 ≤ c ≤ 100 000, 정수), 부대 하나당 체력 h(0 ≤ h ≤ 1, 실수), 부대 하나당 전투력 p(0 ≤ p ≤ 1, 실수)이다. 실수는 소수점 아래 최대 20자리까지 주어질 수 있다.

출력

가능한 최대 효율을 한 줄에 출력한다. 상대 오차 또는 절대 오차가 0.005 미만이면 정답으로 인정된다.

예제2

  1. 예제 1

    입력
    4 100000
    300 1 0.02
    500 0.2 1
    250 0.3 0.1
    1000 1 0.1
    
    예상 출력
    19436.05
    
  2. 예제 2

    입력
    2 100
    1 0.1 1
    1 1 0.1
    
    예상 출력
    3025.00