Dysponujemy n przedmiotami o wagach w ,...,0 wn jednostek każda. Należy sprawdzić, czy można te przedmioty rozłożyć na dwa tyle samo ważące plecaki. Dla uproszczenia należy przyjąć, że suma wag wszystkich przedmiotów jest liczbą parzystą.
Działanie programu należy sprawdzić na następujących wagach: 3, 4, 3, 1, 3, 2, 3, 2, 1.
Ostateczna wersja programu powinna pobierać od użytkownika liczbę przedmiotów i ich wagi, a zwracać odpowiedź czy rozkład jest możliwy. Jeśli tak, zwracane mogą być numery przedmiotów wybranych do danej grupy (to nie jest obowiązkowe).
Zadanie należy wykonać posługując się następującą metodą:
Wykorzystujemy tablicę dwuwymiarową o n+1 wierszach i liczbie kolumn odpowiadającej docelowej wadze plecaka +1, czyli b=1(w0...wn)/2.
W tablicy na miejscu [j][k] umieszczamy 1 jeśli istnieje podzbiór zbioru {w0,...,wj}, dla którego suma jego elementów jest równa k, 0 w przeciwnym przypadku. Tablicę tę wypełniamy rekurencyjnie:
Na miejscu [0][k] stawiamy 1 jeśli k=0 lub k=w0, 0 w przeciwnym przypadku, dla k=0,1,2,...b.
Na miejscu [j][k] stawiamy 1 jeśli na miejscu [j-1][k] jest 1 lub k-wj oraz na miejscu [j-1][k-wj] stoi 1, dla j=1,...,n oraz k=0,1,...,b.
Podzbiór istnieje jeśli w kolumnie b stoi 1.