Module: Algoritmos Gananciosos


Problem

1 /9


Formaggio compra panzerotti

Theory Click to read/hide

Um algoritmo guloso é um algoritmo que a cada passo escolhe a variante ótima (dentro do passo atual) na expectativa de que a solução final seja ótima no sentido global.

Pequeno exemplo:
Suponha que temos um número ilimitado de moedas de diferentes denominações e precisamos coletar a quantia S. Vamos considerar dois casos específicos, cada um dos quais tentaremos resolver com um algoritmo guloso.
Ou seja, agiremos da seguinte forma: em cada etapa levaremos uma moeda de maior valor (a melhor opção dentro da etapa), que não exceda o valor restante.

a) Sejam as denominações das moedas 1, 5 e 10, e S = 27.
1) Take 10, S: 27 -> 17
2) Take 10, S: 17 -> 7
3) Take 5, S: 7 -> 2
4) Take 1, S: 2 -> 1
5) Take 1, S: 1 -> 0
Como resultado, eles marcaram a quantia de cinco moedas. Você pode independentemente (por exemplo, força bruta) garantir que, com 4 moedas ou menos, não consiga marcar 27.

b) Sejam as denominações das moedas 1, 5 e 7, e S = 24.
1) Take 7, S: 24 -> 17
2) Take 7, S: 17 -> 10
3) Take 7, S: 10 -> 3
4) Take 1, S: 3 -> 2
5) Take 1, S: 2 -> 1
6) Take 1, S: 1 -> 0.
Marcamos com seis moedas, mas conseguimos marcar S com quatro moedas - duas com valor nominal de 7 e duas com valor nominal de 5.

Como pode ser visto no exemplo, nem sempre é possível resolver problemas com um algoritmo guloso. Mas se levar a uma resposta ótima geral, geralmente será mais fácil do que usar programação dinâmica ou outros métodos.

Problem

Formaggio gosta muito de panzerotti com vários recheios, e não é tão importante com qual deles. Certa vez, estando com fome, Formaggio entrou em uma padaria e viu que estavam à venda panzerotti com tomate, espinafre e cogumelos.
Formaggio quer comprar o máximo possível de panzerotti, mas o problema é que a quantidade de panzerotti à venda é limitada, assim como o dinheiro de Formaggio.

Ajude Formaggio a determinar o número máximo de panzerotti que ele pode comprar.

Entrada:
A primeira linha contém os números P1, P2 e P3 – o custo do panzerotti com tomate, espinafre e cogumelos, respectivamente.
A segunda linha define os valores N1, N2 e N3 – número de panzerotti correspondentes à venda. 
A terceira linha contém o número R – a quantidade de dinheiro que Formaggio tem. 
Todos os números na entrada são inteiros positivos que não excedem 10.000.

Saída:
Imprima um único inteiro - o número máximo de panzerotti que Formaggio pode comprar.

Exemplo:
 
Entrada Saída
5 3 8
2 6 4
23
7