Я должен рекурсивно решить следующую задачу, используя грубую силу подхода:Java рекурсивной Оптимизация
Пусть выполнены два человек, А и В, имеет четное число упорядоченных коробок, каждый из которых с заданным значением. Например, boxes = {5, 3, 7, 10}
. Им нужно разделить ящики между ними следующим образом: человек А выбирает либо первый, либо последний поле в наборе, тогда человек В делает то же самое и так далее, пока не останется никаких ящиков.
Лицо A хочет знать, какое максимальное значение он может получить, в совокупности, имея в виду, что при каждом повороте человек B может сделать два варианта. Другими словами, проблема заключается в том, чтобы придумать алгоритм, который имитирует все варианты обоих людей, учитывая, что они все нацелены на максимальное значение в долгосрочной перспективе.
Так, теперь у меня есть это:
public static int maxValue(ArrayList <Integer> boxes, int choice, int person){
int value;
//Stop condition - if there are no more boxes, return 0
if (boxes.isEmpty())
return 0;
if (choice == 0) //Person chose the first box in the sequence
value = boxes.remove(0);
else //Person chose the last box in the sequence
value = boxes.remove(boxes.size() - 1);
//Person A makes a choice, checking which one works best in the long run
if (person == 1)
return (value + max(maxValue(boxes, 0, 2), maxValue(boxes, 1, 2)));
//Person B makes a choice, checking which one works best in the long run
else
return (value + max(maxValue(boxes, 0, 1), maxValue(boxes, 1, 1)));
}
Для входа boxes = {5, 3, 7, 10}
, код должен производить 15, но один я писал выше, дает мне 25. После размещения некоторых отладки отпечатков, я видел:
->Person A chooses '10'
->Person B chooses '7'
->Person A chooses '3'
->Person B chooses '5'
А затем просто добавляет все значения. Я полагаю, что это связано с тем, как функция вызывается человеком A со ссылкой на человека B (в max(maxValue(boxes, 0, 2), maxValue(boxes, 1, 2))
) и наоборот, а также из-за этого условия останова (если я его немного изменю, возвращаемое значение отличается) ,
Я был бы очень признателен, если бы кто-нибудь мог взглянуть и, возможно, рассказать мне, что вы думаете. Спасибо!
Я голосующий, чтобы закрыть этот вопрос не по теме, потому что он принадлежит https://codereview.stackexchange.com/. –
Ваш вопрос противоречит. 'независимо от выбора человека B' и' имитирует все варианты обоих людей, кто это? –
@ LutzHorn Я удалю его и поместим там, потом! Извините, я даже не знал о существовании codereview – Vmf