حقيبة الظهر

حقيبة الظهر

متوسط

مقدمة

بوب لص. بعد أشهر من التخطيط الدقيق، يتمكن أخيرًا من اختراق الأنظمة الأمنية لمتجر فاخر.

أمامه عناصر كثيرة، لكل منها قيمة ووزن. يسرّ بوب أن يأخذ العناصر كلها، لكن حقيبة ظهره لا تتحمل إلا وزنًا محدودًا. لذا عليه أن يفكر بعناية في العناصر التي سيأخذها، حتى تكون القيمة الإجمالية لما يختاره أكبر ما يمكن.

التعليمات

مهمتك هي أن تحدد العناصر التي ينبغي أخذها بحيث يكون إجمالي قيمة ما يختاره Bob أكبر ما يمكن، مع مراعاة سعة حمل حقيبة الظهر.

ستُمثَّل العناصر على هيئة مصفوفة من العناصر. سيكون لكل عنصر وزن وقيمة. جميع القيم المعطاة موجبة قطعًا. لا يمكن لـ Bob أن يأخذ أكثر من نسخة واحدة من كل عنصر.

على سبيل المثال:

Items: [
  { "weight": 5, "value": 10 },
  { "weight": 4, "value": 40 },
  { "weight": 6, "value": 30 },
  { "weight": 4, "value": 50 }
]

Knapsack Maximum Weight: 10

في المثال أعلاه، وزن العنصر الأول 5 وقيمته 10، ووزن العنصر الثاني 4 وقيمته 40، وهكذا. في هذا المثال، ينبغي أن يأخذ Bob العنصرين الثاني والرابع ليحصل على أكبر قيمة ممكنة، وهي في هذه الحالة 90. فهو لا يستطيع الحصول على أكثر من 90 لأن الوزن الأقصى لحقيبة ظهره هو 10.


المصدر

ويكيبيديايفتح الرابط في نافذة أو علامة تبويب جديدة
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Haskell Exercism

مستعد لبدء حقيبة الظهر؟

سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.