Menu
CoddyTech

Fractional Knapsack

Hai n oggetti. L'oggetto i vale values[i] e pesa weights[i]. La tua borsa può contenere un peso totale massimo di capacity e puoi prendere qualsiasi parte di un oggetto: un pezzo dell'oggetto i che pesa w vale values[i] × w / weights[i].

Scrivi una funzione chiamata fractionalKnapsack che restituisca il valore totale massimo che la borsa può contenere, arrotondato per difetto a un numero intero.

Funzione

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
il valore di ciascun elemento
weightsinteger-array
il peso di ogni elemento
capacityinteger
il peso massimo che la borsa può contenere
Restituisceinteger
il valore totale più grande che entra nella borsa, arrotondato per difetto

Vincoli

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

Esempi

Input
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
Output
151
Spiegazione
Per unità di peso, gli oggetti valgono 5, 3, 6 e 2.5. Gli oggetti 2 e 0 entrano per intero per un valore di 70, lasciando spazio per altri 27; 27 delle 30 unità dell’oggetto 1 aggiungono 81, per un totale di 151.
challenge icon

Per approfondire

Riesci a trovare la risposta in tempo O(n), senza ordinare tutti gli elementi?

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

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

151