Menu
CoddyTech

Fractional Knapsack

Tienes n artículos. El artículo i vale values[i] y pesa weights[i]. Tu bolsa puede contener un peso total de como máximo capacity, y puedes llevar cualquier parte de un artículo: una parte del artículo i que pese w vale values[i] × w / weights[i].

Escribe una función llamada fractionalKnapsack que devuelva el valor total más alto que puede llevar la bolsa, redondeado hacia abajo al número entero más cercano.

Función

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
el valor de cada elemento
weightsinteger-array
el peso de cada artículo
capacityinteger
el peso máximo que puede soportar la bolsa
Devuelveinteger
el valor total más grande que cabe en la bolsa, redondeado hacia abajo

Restricciones

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

Ejemplos

Entrada
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Salida
151
Explicación
Por unidad de peso, los artículos valen 5, 3, 6 y 2.5. Los artículos 2 y 0 se incluyen enteros por 70, y quedan 27 de capacidad; 27 de las 30 unidades del artículo 1 añaden 81, para un total de 151.
challenge icon

Para ir más allá

¿Puedes encontrar la respuesta en tiempo O(n), sin ordenar todos los elementos?

Restablecer código
def fractionalKnapsack(values, weights, capacity):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

151