#A6011. 正好装够

正好装够

题目背景

食堂要准备一份「标准营养餐」,食材总重必须正好 W 克——多一点超标、少一点不够,都不行。

食堂有 n 种散装食材,第 i 种一共 w_i 克,全部用上能提供 v_i 点营养。食材可以任意称取(比如只取其中一部分),称多少克就得到对应比例的营养。

师傅想让这份营养餐的总营养尽可能高。

题目描述

给定 n 种食材的总量 w_i 与全部用上的营养 v_i,以及要求的食材总重 W。可以从每种食材中取任意重量(不超过其总量,也可以一点不取),使取用总重恰好等于 W,求能获得的最大总营养,保留两位小数。如果所有食材的总重加起来都不足 W 克,就凑不出这一份,输出 -1。

输入格式

第一行两个整数 n, W。

接下来 n 行,每行两个整数 w, v,表示一种食材的总量与全部用上的营养。

输出格式

一个实数,表示最大总营养,保留两位小数;若总重不足 W,输出 -1。

输入输出样例

4 10
4 16
3 9
5 5
1 2
29.00

样例 1 解释

先取总量 4、3、1 的三种食材(共 8 克,营养 16+9+2=27),再从第 3 种(5 克、营养 5)里取 2 克,得到营养 2。总重正好 10 克,总营养 29;其他配法都达不到 29。

说明/提示

- 1 ≤ n ≤ 10^5 - 1 ≤ w_i ≤ 10^6 - 1 ≤ v_i ≤ 10^6 - 1 ≤ W ≤ 10^9 - 食材可按任意重量称取,营养按重量等比计算 - 若所有食材总重不足 W,输出 -1