#python
#python
Вопрос:
Я пытаюсь написать функцию, которая вернет максимальное значение для заданной емкости из списка элементов.Если два или более элементов имеют одинаковое значение, найдите наилучшую возможную комбинацию. Функция будет похожа function(capacity,item_list)
, и ей нужно вернуть значение max_value. Пример ввода: (‘имя’, вес, значение)
item_list = [('item1', 2, 20), ('item2', 3, 20), ('item3', 2, 50), ('item4', 6, 80)]
item_list2 = [('item1', 8, 100), ('item2', 4, 100), ('item3', 4, 100)]
Ожидаемый результат function(5,item_list)
для списка for 1 и function(10, item_list2)
:
70
200
Я успешно получил ожидаемый результат для данного примера.Тем не менее, я продолжаю проваливать какой-то скрытый входной тест.
Я делаю это так: сортирую список в порядке убывания значения, если элемент имеет одинаковое значение, будет преобладать элемент с меньшим весом.
item_list = [('item4', 6, 80),('item3', 2, 50),('item1', 2, 20),('item2', 3, 20)]
Моя проблема здесь в том, что иногда комбинация элементов с меньшим значением будет больше, чем у элемента с более высоким значением, но большим весом. Я просто не знаю, как решить эту проблему.
Я очень признателен, если кто-нибудь может дать мне некоторые рекомендации и направить меня к какому-нибудь ресурсу для чтения. Я предпочитаю простое кодовое решение, потому что я все еще новичок во всем этом. Спасибо!
Комментарии:
1. просто google «рюкзак 0/1»
2. я пробовал, но код слишком сложный для моего понимания.
3. опубликуйте код, который вы пробовали
4. Это проблема с рюкзаком, которая является сложной. Лучший подход — использовать выпуклую оптимизацию.
pulp
Модуль хорош для этого. Вот руководство по ит, которое решает аналогичную проблему, которую вы должны быть в состоянии адаптировать для этого. (Когда учебная задача минимизирует затраты, вы максимизируете стоимость товара. Когда он устанавливает минимальное питание, вы устанавливаете максимальный вес.)