Menu
CoddyTech

0/1 Knapsack Problem

Tienes n artículos. El artículo i pesa weights[i] y vale values[i]. Tu mochila puede llevar un peso total de como máximo capacity. Cada artículo existe una sola vez, y o bien lo empacas entero o lo dejas atrás. Devuelve el mayor valor total que puedes empacar.

Función

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
el peso de cada elemento
valuesinteger-array
el valor de cada elemento
capacityinteger
el mayor peso que puede cargar la bolsa
Devuelveinteger
el mayor valor total de los artículos cuyos pesos caben en la capacidad

Restricciones

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

Ejemplos

Entrada
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Salida
17
Explicación
Los elementos 0 y 2 pesan 4 + 3 = 7 y valen 10 + 7 = 17. Empacar primero el elemento más valioso (peso 5, valor 12) deja espacio solo para el elemento 1, para un total de 16.
challenge icon

Para ir más allá

Supongamos que la capacidad puede llegar a 10^9 mientras que los valores suman como máximo 10^4. ¿Por qué indexarías la tabla?

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

Prueba #1

Prueba #2

Prueba #3

Argumentos

weights = [4, 2, 3, 5]
values = [10, 4, 7, 12]
capacity = 7

Salida Esperada

17