У меня есть следующее решение проблемы с рюкзаком: (wt [] - массив весов, val [] - массив значений, n - размер массивов, индекс - текущий элемент, который мы пытаясь (для рекурсии) и обрами являются массивом, который представляет погоду или не пункт я был включен в растворе.Распечатать значения решения для рюкзака
int knapSack(int W, int wt[], int val[], int n, int index, int arr[])
{
if (n == index || W == 0)
return 0;
if (wt[index] > W)
return knapSack(W, wt, val, n, index+1);
int with=val[index]+knapSack(W-wt[index], wt, val, n, index+1);
int without=knapSack(W, wt, val, n, index+1);
if(with>without){
arr[index]=1;
return with;
}
else{
arr[index]=0;
return without;
}
}
Я пытаюсь напечатать, в этом рекурсивном решении элементов, которые выбраны, путем установки индексы взятых в массиве (res) до 1.
Как я понимаю, если with>without
, это означает, что я выбираю текущий элемент или элемент #index. Так почему же это не возвращает правильное значение?
Я использую рекурсивный алгоритм по какой-либо причине, я знаю, что использование версии memoization может быть проще здесь. Пример:
Массы: 5 6 7 10 11
Значения: 2 4 5 6 9
W = 25
будет возвращать 5 из них в разрешении массива. Когда раствор равен 18 с пунктами 2,3,5 (начиная с индекса 1).
Почему вы добавили награду? Я хотел проголосовать за закрытие этого, потому что нет [MCVE] (http://stackoverflow.com/help/mcve). – melpomene
Добавлен пример. –
А дальше остальное код? – melpomene