Menu
CoddyTech

0/1 Knapsack Problem

لديك عدد n من العناصر. يزن العنصر i مقدار weights[i] وتبلغ قيمته values[i]. يمكن لحقيبتك حمل وزن إجمالي لا يتجاوز capacity. يوجد عنصر واحد من كل نوع، ويمكنك إما وضعه كاملًا في الحقيبة أو تركه. أعد أكبر قيمة إجمالية يمكنك وضعها في الحقيبة.

الدالة

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

القيود

  • 1 ≤ n ≤ 100، حيث n = weights.length = values.length
  • 1 ≤ weights[i] ≤ 1000
  • 1 ≤ values[i] ≤ 104
  • 1 ≤ capacity ≤ 1000

أمثلة

المدخلات
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
المخرجات
17
الشرح
يزن العنصران 0 و2 مقدار 4 + 3 = 7، وتبلغ قيمتهما 10 + 7 = 17. إن وضع العنصر الأعلى قيمة أولًا (الوزن 5، القيمة 12) لا يترك مجالًا إلا للعنصر 1، ليكون المجموع 16.
challenge icon

سؤال إضافي

افترض أن السعة قد تصل إلى 10^9، بينما لا يتجاوز مجموع القيم 10^4. بماذا ستفهرس الجدول؟

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

اختبار #1

اختبار #2

اختبار #3

الوسائط

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

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

17