Menu
CoddyTech

0/1 Knapsack Problem

Hai n oggetti. L’oggetto i pesa weights[i] e vale values[i]. La tua borsa può trasportare un peso totale massimo di capacity. Ogni oggetto è disponibile una sola volta e puoi scegliere se inserirlo interamente nella borsa oppure lasciarlo. Restituisci il valore totale massimo che puoi portare.

Funzione

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
il peso di ciascun elemento
valuesinteger-array
il valore di ciascun elemento
capacityinteger
il peso massimo che la borsa può trasportare
Restituisceinteger
il valore totale più elevato degli elementi i cui pesi rientrano nella capacità

Vincoli

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

Esempi

Input
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
Output
17
Spiegazione
Gli elementi 0 e 2 pesano 4 + 3 = 7 e valgono 10 + 7 = 17. Inserire per primo l’elemento di maggior valore (peso 5, valore 12) lascia spazio solo per l’elemento 1, per un valore di 16.
challenge icon

Per approfondire

Supponiamo che la capacità possa arrivare a 10^9, mentre i valori sommati siano al massimo 10^4. In base a cosa indicizzeresti la tabella?

Ripristina il codice
def knapsack(weights, values, capacity):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

17