Dla pewnych sytuacji kod wypisuje mi wagę większą niż dopuszczalna (bierze dodatkowe przedmioty do liczenia sumarycznej wagi) lecz maksymalna wartość jest zawsze dobra.
Twoja metoda wyszukiwania, co włożyliśmy do plecaka, to bzdura. Nie możesz sobie tego oznaczać w else, bo nie bierzesz pod uwagę, że jakiś przedmiot mógł zostać zapakowany kosztem innego. Stąd jeśli masz taki zbiór przedmiotów, który spowoduje, że jeden przedmiot wypchnie drugi, to masz problem. Zrób to metodą backtracking-u na policzonej tablicy: