Эй, ребята, я немного новичок в сообществе и в этом, так что это может быть простой вопрос.
Я работаю над проблемой домашней работы в c ++, где я должен написать рекурсивное решение проблемы с рюкзаком, а также перечислить элементы в рюкзаке в конце.
Вот проблема
Вы прибываете на остров, полный сокровищ. Было бы неплохо взять их всех, но вы можете нести только такой большой вес. Вы напишите программу, которая поможет выбрать сокровища так, чтобы общая стоимость выбранных сокровищ была максимизирована. Ввод проблемы — вес, который вы можете нести, и список сокровищ, каждый из которых представлен своим весом и стоимостью. Формат ввода указан в следующем; все числа целые. Выходные данные — это максимальное значение сокровищ, которые вы можете забрать, и список предметов, которые дают максимальное значение. (Примечание: (1) каждый элемент может быть либо взят, либо не взят, но не разрезан (или частично взят); (2) Вы должны сначала написать программу для вычисления максимального значения, которое можно убрать, перед перечислением каждого отдельного элемента. )
Можно предположить, что количество предметов не более 42.
Так что я думаю, что у меня есть решение проблемы, однако я не могу понять, как отслеживать вещи. Я попытался просто вставить массив, а затем каждый раз, когда выбирал элемент, чтобы пометить соответствующий массив флагов, но это не сработало.
Имейте в виду, это должно быть рекурсивным.
Это то, что я до сих пор.
int maxvalue(int N, int W[], int V[], int totalweight, int beg, int end)
{
//base case
if (beg > end)
return 0;if (totalweight < W[beg])
{
//not taken
return maxvalue(N-1, W, V, totalweight, beg+1, end);
}
else
{
//taken
return max(V[beg] + maxvalue(N-1, W, V, totalweight - W[beg], beg+1,
end), maxvalue(N-1, W, V, totalweight, beg+1, end) );
}
}
Мне кажется, что некоторые аргументы в функции не нужны, но профессор дал нам прототип, поэтому я использую его. Я хочу сделать это так, как хотел профессор, но это очень запутанно. Это то, что он сказал, что я должен сделать.
«int flag [] установлен в подпрограмме,
Внутри этой процедуры вам нужно объявить два массива флагов для двух вариантов
Затем вы должны скопировать и вернуть правильный флаговый массив и установить правильное значение флага для выбора, который вы сделали для первого элемента. «
Я не очень понимаю, что он просит меня сделать или как это сделать. Я бы очень хотел помочь с этим, ребята. Спасибо!
Задача ещё не решена.
Других решений пока нет …