Module: Algoritmos codiciosos


Problem

1 /9


Formaggio compra panzerotti

Theory Click to read/hide

Un algoritmo codicioso es un algoritmo que en cada paso elige la variante óptima (dentro del paso actual) con la expectativa de que la solución final sea óptima en el sentido global.

Pequeño ejemplo:
Supongamos que tenemos un número ilimitado de monedas de diferentes denominaciones y necesitamos recolectar la cantidad S. Consideremos dos casos específicos, cada uno de los cuales intentaremos resolver con un algoritmo codicioso.
Es decir, actuaremos de la siguiente manera: en cada paso tomaremos una moneda de la denominación más alta (la mejor opción dentro del paso), que no supere la cantidad restante.

a) Sean las denominaciones de las monedas 1, 5 y 10, y S = 27.
1) Toma 10, S: 27 -> 17
2) Tomar 10, S: 17 -> 7
3) Toma 5, S: 7 -> 2
4) Toma 1, S: 2 -> 1
5) Toma 1, S: 1 -> 0
Como resultado, anotaron la cantidad de cinco monedas. Puedes asegurarte de forma independiente (por ejemplo, fuerza bruta) de que por 4 monedas o menos no podrás anotar 27.

b) Sean las denominaciones de las monedas 1, 5 y 7, y S = 24.
1) Toma 7, S: 24 -> 17
2) Toma 7, S: 17 -> 10
3) Toma 7, S: 10 -> 3
4) Toma 1, S: 3 -> 2
5) Toma 1, S: 2 -> 1
6) Toma 1, S: 1 -> 0.
Anotamos con seis monedas, pero pudimos obtener S con cuatro monedas: dos con un valor nominal de 7 y dos con un valor nominal de 5.

Como se puede ver en el ejemplo, no siempre es posible resolver problemas con un algoritmo codicioso. Pero si conduce a una respuesta óptima general, entonces será más fácil que usar programación dinámica u otros métodos.

Problem

Formaggio es muy aficionado a los panzerotti con varios rellenos, y no es tan importante con cuál. Una vez, estando hambriento, Formaggio entró en una panadería y vio que estaban a la venta panzerotti con tomates, espinacas y champiñones.
Formaggio quiere comprar tantos panzerotti como sea posible, pero el problema es que la cantidad de panzerotti a la venta es limitada, al igual que el dinero de Formaggio.

Ayuda a Formaggio a determinar el número máximo de panzerotti que puede comprar.

Entrada:
La primera línea contiene los números P1, P2 y P3 – el costo de panzerotti con tomates, espinacas y champiñones respectivamente.
La segunda línea define los valores N1, N2 y N3 – cantidad de panzerotti a juego a la venta. 
La tercera línea contiene el número R – la cantidad de dinero que tiene Formaggio. 
Todos los números en la entrada son números enteros positivos que no exceden 10000.

Salida:
Imprime un solo número entero: el número máximo de panzerotti que Formaggio puede comprar.

Ejemplo:
 
Entrada Salida
5 3 8
2 6 4
23
7