꽃 피우기
시간 제한8초메모리 제한512 MB
W*pw + ΣF_i*pf_i를 최소로 하면서 W*vw_i + F_i*vf_i ≥ th_i, W,F_i ≥ 0을 만족시키는 최소 비용을 구한다.
문제
꽃씨 개를 심었고, 씨앗마다 서로 다른 꽃이 핀다. 이 꽃을 모두 한꺼번에 피우려고 한다.
각 그루에는 활력이라는 값이 있고 처음에는 0이다. 물을 주거나 비료를 뿌리면 활력이 바뀌며, 번째 그루는 활력이 이상이 되면 꽃이 핀다. 영양이 더 필요 없는 꽃도 있어서 는 음수일 수 있다.
물은 모든 그루에 닿는다. 물을 리터 주면 모든 ()에 대해 번째 그루의 활력이 만큼 바뀌고, 비용은 엔이다. 는 정수가 아니어도 된다. 물을 싫어하는 꽃도 있어서 는 음수일 수 있다.
비료는 종류가 있고, 번째 비료는 번째 그루에만 작용한다. 번째 비료를 킬로그램 뿌리면 번째 그루의 활력이 만큼 바뀌고, 비용은 엔이다. 도 정수가 아니어도 된다. 비료는 그루마다 따로 만들었으므로 는 항상 양수이다.
물론 비용도 최대한 줄이고 싶다. 정리하면, 모든 ()에 대해 , , 을 지키면서
를 최소로 만들어야 한다. 이 최소 비용을 구하라.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 데이터셋은 100개를 넘지 않고, 입력 전체 크기는 20MB를 넘지 않는다. 데이터셋 하나의 형식은 다음과 같다.
N
pw
vw1 pf1 vf1 th1
:
:
vwN pfN vfN thN
첫째 줄에 꽃씨의 개수 이 주어진다. 둘째 줄에 물 1리터의 가격 가 주어진다. 이어지는 개 줄에는 꽃 하나를 나타내는 네 정수 , , , 가 공백으로 구분되어 주어진다.
모든 값은 , , , , , 을 만족한다.
입력의 끝은 0 하나만 있는 줄로 표시된다.
출력
각 데이터셋마다 모든 꽃을 피우는 최소 비용을 한 줄에 출력한다. 소수점 아래 여섯째 자리까지 출력하고, 일곱째 자리부터는 반올림한다.