#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