Leftover Recipes(剩下的食谱)
时间限制:2s 内存限制:1024MB
【原题地址】
【问题描述】
你的冰箱里有 N 种配料。我们称它们为配料1、…和配料 N。您有 Qi 克配料 i 。
您可以制作两种菜肴。制作一份 A 菜肴,需要 Ai 克的配料 i (1≤i≤N)。制作一份 B 菜肴,每种材料需要 Bi 克 i 。每种菜只能做整数份。
仅使用冰箱中的配料,你最多可以制作多少份菜肴?
【输入格式】
输入内容由标准输入法提供,格式如下
N
Q1 Q2 … QN
A1 A2 … AN
B1 B2 … BN
1 ≤ N ≤ 10
1 ≤ Qi ≤ 10^6
0 ≤ Ai ≤ 10^6
有一个 i 使得 Ai ≥1 .
0 ≤ Bi ≤ 10^6
有一个 i ,Bi ≥ 1 。
所有输入值均为整数。
【输出格式】
假设您最多可以制作 S 份菜肴,请打印整数 S 。
【样例输入】
样例一、
2
800 300
100 100
200 10
样例二、
2
800 300
100 0
0 10
【样例输出】
样例一、
5
样例二、
38
【样例说明】
对于第一个测试用例,这台冰箱有 800 克配料 1 和 300 克配料 2 。
你可以用 100 克配料 1 和 100 克配料 2 制作一份 A 菜,用 200 克配料 1 和 10 克配料 2 制作一份 B 菜。
要制作两份 A 菜和三份 B 菜,需要 100 × 2 + 200 × 3 = 800 克配料 1 和 100 × 2 + 10 × 3 = 230 克配料 2 ,这两种配料都不会超过冰箱里的用量。这样一共可以做 5 份菜肴,但不可能做 6 份,所以答案是 5 。
对于第二个测试用例,您可以用 800 克配料 1 制作 8 份 A 菜,用 300 克配料 2 制作 30 份 B 菜,总共可以制作 38 份。
【解题思路】
老汉使用到的是贪心的解题方式
本题是求在给定的配料中所能做出的最大菜肴数。
在对菜肴数求解的过程,肯定是需要比对是否可以做成,菜品数是否为最大,如果逐一去比对所有可能,时间上是不允许的,因此我们贪婪的去求当菜肴 A 制作0份~所能制作的最大份数时,分别能制作最多多少B菜肴,以及总和数最大的一个。
代码注释有详细过程
【代码】
package ABC338_C_LeftoverRecipes;
import