Итак, у меня 12 списков, каждый из которых содержит 28 элементов со значением.
Я пытаюсь максимизировать значение первого списка, переключая элементы с другими 11 списками.
Я также могу торговать разным количеством предметов. Например, я могу обменять 6 предметов из списка 1 и 3 предмета из списка 2. Или я могу обменять 19 предметов из списка 1 и 22 предмета из списка 2. В большом пуле есть другие предметы, которые не являются частью списка Таким образом, если список получает более 28 элементов, самые низкие значения могут быть легко удалены, а если список содержит менее 28 элементов, можно легко добавлять новые элементы.
Однако есть одно ограничение: я могу торговать только с одним списком за раз. Например, я не могу торговать 3 предметами из списка 1 в список 2, торговать 3 предметами из списка 2 в список 3 и торговать 3 предметами из списка 3 в список 1. Когда я торгую из списка 1, я могу только торгуйте с одним другим списком одновременно.
Я могу, очевидно, грубой силой это сделать, но я чувствую, что это займет вечность Я не очень хорошо разбираюсь в комбинациях, поэтому я не совсем уверен, сколько было бы разных комбинаций, если бы я хотел использовать грубую силу.
Итак, мои вопросы таковы: грубое принуждение является возможным решением, а если нет, то каков пример алгоритма, который мог бы мне помочь?
Спасибо, Кшиш.
EDIT:
Пример:
List 1
[Apple - 12]
[Banana - 5]
[Orange - 8]
List 2
[Steak - 15]
[Chicken - 2]
[Fish - 7]
List 3
[Zebra - 20]
[Horse - 6]
[Elephant - 10]
Итак, я начну со списка 1. Вот что делает программа:
if (List1.Apple - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak
if (list1.Apple - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - List2.Chicken
if (list1.Apple - list2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Apple - list2.Fish
if (list1.Banana - List2.Steak < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Steak
if (list1.Banana - List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Chicken
if (list1.Banana - List2.Fish < BestTradeAvailable) Then BestTradeAvailable = list1.Banana - List2.Fish
и т.д.
Я также хочу сделать несколько предметов одновременно, так:
if (list1.Apple + list1.Banana - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = list1.Apple + list1.Banana - List2.Steak + List2.Chicken
Но, как я уже говорил, вы можете обменять один предмет из списка 1 и 2 предмета из списка 2:
if (list1.Apple - List2.Steak + List2.Chicken < BestTradeAvailable) Then BestTradeAvailable = List1.Apple - List2.Steak + List2.Chicken
В общем, я просто хочу попытаться найти лучшую сделку из доступных.
В этом примере лучшей сделкой будет обмен Apple + Orange на List3 для Zebra и Elephant, потому что эта сделка увеличивает общую стоимость List1 на наибольшую сумму.