Menu
CoddyTech

0/1 Knapsack Problem

Você tem n itens. O item i pesa weights[i] e vale values[i]. Sua mochila comporta um peso total de, no máximo, capacity. Há apenas uma unidade de cada item, e você pode colocá-lo inteiro na mochila ou deixá-lo para trás. Retorne o maior valor total que você pode levar.

Função

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
o peso de cada item
valuesinteger-array
o valor de cada item
capacityinteger
o maior peso que a bolsa pode carregar
Retornainteger
o maior valor total de itens cujos pesos cabem na capacidade

Restrições

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

Exemplos

Entrada
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Saída
17
Explicação
Os itens 0 e 2 pesam 4 + 3 = 7 e valem 10 + 7 = 17. Colocar primeiro o item mais valioso (peso 5, valor 12) deixa espaço apenas para o item 1, totalizando 16.
challenge icon

Para ir além

Suponha que a capacidade possa chegar a 10^9, enquanto a soma dos valores seja de, no máximo, 10^4. Pelo que você indexaria a tabela?

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

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

17