Hej, w ramach mini-projektu uczelnianego muszę napisać program rozwiązujący problem plecakowy. Jako odpowiedź powinien zostać wypisany wektor składający się z n bitów, gdzie i-ty bit 1 oznacza włożenie i-tego przedmiotu do plecaka.
Znalazłem takie rozwiązanie:
static int max(int a, int b) {
return (a > b) ? a : b;
}
static int knapSack(int capacity, int tabOfWeights[], int tabOfValues[], int numberOfItems) {
if (numberOfItems == 0 || capacity == 0)
return 0;
if (tabOfWeights[numberOfItems - 1] > capacity)
return knapSack(capacity, tabOfWeights, tabOfValues, numberOfItems - 1);
else
return max(tabOfValues[numberOfItems - 1] + knapSack(capacity - tabOfWeights[numberOfItems - 1], tabOfWeights,
tabOfValues, numberOfItems - 1),
knapSack(capacity, tabOfWeights, tabOfValues, numberOfItems - 1));
}
Macie pomył jak wyłuskać z podzbiorów sumy i wartości indeksów? Suma do sprawdzenia, czy jest maksymalna a indeksy do utworzenia wektora charakterystycznego.