Menu
CoddyTech

Fractional Knapsack

Você tem n itens. O item i vale values[i] e pesa weights[i]. Sua mochila comporta um peso total de, no máximo, capacity, e você pode pegar qualquer parte de um item: um pedaço do item i que pesa w vale values[i] × w / weights[i].

Escreva uma função chamada fractionalKnapsack que retorne o maior valor total que a mochila pode carregar, arredondado para baixo até um número inteiro.

Função

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
o valor de cada item
weightsinteger-array
o peso de cada item
capacityinteger
o maior peso que a mochila pode suportar
Retornainteger
o maior valor total que cabe na mochila, arredondado para baixo

Restrições

  • 1 ≤ n ≤ 5000, onde n = values.length = weights.length
  • 1 ≤ values[i], weights[i] ≤ 104
  • 1 ≤ capacity ≤ 108

Exemplos

Entrada
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Saída
151
Explicação
Por unidade de peso, os itens valem 5, 3, 6 e 2.5. Os itens 2 e 0 entram inteiros, somando 70, e restam 27 de capacidade; 27 das 30 unidades do item 1 acrescentam 81, totalizando 151.
challenge icon

Para ir além

Você consegue encontrar a resposta em tempo O(n), sem ordenar todos os itens?

Redefinir código
def fractionalKnapsack(values, weights, capacity):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

values = [40, 90, 30, 50]
weights = [8, 30, 5, 20]
capacity = 40

Saída Esperada

151