Module: 贪心算法


Problem

1 /9


Formaggio 收购 panzerotti

Theory Click to read/hide

贪心算法是一种算法,它在每一步都选择最优(在当前步骤内)变体,期望最终解决方案在全局意义上是最优的。

小例子:
假设我们有无限数量的不同面额的硬币,我们需要收集数量 S。让我们考虑两种具体情况,我们将尝试用贪心算法解决每种情况。
即,我们将采取以下行动:在每一步中,我们将取一枚面额最高的硬币(该步内的最佳选择),不超过剩余数量。

a) 设硬币面额为 1、5 和 10,S = 27。
1) 取 10, S: 27 -> 17
2) 取 10, S: 17 -> 7
3) 取 5, S: 7 -> 2
4)取1,S:2-> 1
5)取1,S:1-> 0
结果,他们得分了五个硬币的数量。您可以独立(例如,蛮力)确保对于 4 个或更少的硬币,您将无法获得 27 分。

b) 设硬币的面额为 1、5 和 7,S = 24。
1) 取 7, S: 24 -> 17
2) 取 7, S: 17 -> 10
3) 取 7, S: 10 -> 3
4) 取 1, S: 3 -> 2
5)取1,S:2-> 1
6)取1,S:1-> 0.
我们用六枚硬币得分,但可以用四枚硬币得分 S - 两枚面值为 7,两枚面值为 5。

从例子中可以看出,用贪心算法并不总是可以解决问题。但如果它导致一个整体最优答案,那么它通常会比使用动态规划或其他方法更容易。

Problem

Formaggio非常喜欢有各种馅料的panzerotti,至于用哪一种并不那么重要。一次,在饥饿的状态下,Formaggio 走进一家面包店,看到正在出售带有西红柿、菠菜和蘑菇的 panzerotti。
Formaggio 想买尽可能多的 panzerotti,但问题是出售的 panzerotti 数量有限,就像 Formaggio 的钱一样。

帮助 Formaggio 确定他可以购买的最大 panzerotti 数量。

输入:
第一行包含数字 P1、P2 和 P3 ——分别是西红柿、菠菜和蘑菇的panzerotti的成本。
第二行定义了值 N1、N2 和 N3——出售匹配的 panzerotti 数量。 
第三行包含数字 R – Formaggio 有多少钱。 
输入的所有数字都是不超过10000的正整数。

输出:
打印一个整数 - Formaggio 可以购买的最大 panzerotti 数量。

示例:
  <正文>
输入 输出
5 3 8
2 6 4
23
7