Menu
CoddyTech

Fractional Knapsack

لديك n عناصر. قيمة العنصر i هي values[i] ووزنه weights[i]. تسع حقيبتك وزنًا إجماليًا لا يتجاوز capacity، ويمكنك أخذ أي جزء من العنصر: فقيمة جزء من العنصر i يزن w هي values[i] × w / weights[i].

اكتب دالة باسم fractionalKnapsack تُعيد أكبر قيمة إجمالية يمكن للحقيبة حملها، مقربةً إلى الأسفل إلى أقرب عدد صحيح.

الدالة

fractionalKnapsack(values: integer-array, weights: integer-array, capacity: integer) → integer
valuesinteger-array
قيمة كل عنصر
weightsinteger-array
وزن كل عنصر
capacityinteger
أكبر وزن يمكن للحقيبة أن تحمله
تُرجعinteger
أكبر قيمة إجمالية تتسع لها الحقيبة، مع التقريب إلى الأسفل

القيود

  • 1 ≤ n ≤ 5000، حيث n = values.length = weights.length
  • 1 ≤ values[i], weights[i] ≤ 104
  • 1 ≤ capacity ≤ 108

أمثلة

المدخلات
values = [40, 90, 30, 50]weights = [8, 30, 5, 20]capacity = 40
المخرجات
151
الشرح
تبلغ قيمة الوحدات من العناصر لكل وحدة وزن 5 و3 و6 و2.5. يُؤخذ العنصران 2 و0 كاملين بقيمة 70، ويتبقى مكان لـ27، وتضيف 27 وحدة من وحدات العنصر 1 البالغ عددها 30 قيمة 81، ليصبح المجموع 151.
challenge icon

سؤال إضافي

هل يمكنك إيجاد الإجابة في زمن O(n)، دون فرز جميع العناصر؟

إعادة ضبط الشيفرة
def fractionalKnapsack(values, weights, capacity):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

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

الإخراج المتوقع

151