Prva vec, aky datovy typ vyzera byt najvhodnejsi na ukladanie jednotlivych poloziek (programujem v C++)?
To přece záleží na tom, jaké ty položky mají ceny/hmotnosti. Malá celá čísla? Velká celá čísla? Lze vydělit společným jmenovatelem? Jsou to floaty a očekává se řešení v rámci floatové přesnosti?
Druha otazka, robim zatial len brute force metodu, mozno sa budem za to pri citani odpovedi hanbit (myslim si, ze to bude primitivne), ale teraz nejak neviem prist na nejake rozumne riesenie, ako prejst vsetky mozne kombinacie jednotlivych poloziek.
Ono totiž obecné rozumné řešení neexistuje (nebo o něm alespoň nikdo neví), batoh je NP-complete. Ale pokud vstup splňuje nějaké podmínky, například jsou čísla po vydělení společným jmenovatelem „malá“, lze použít pseudopolynomiální algoritmus. A pokud nepožaduješ přesné řešení, lze použít nějaký z aproximačních algoritmů a heuristik. Všechno toto se píše na Wikipedii.
A pokud je to ten domácí úkol, co se zadává v prváku na matfyzu, tak tam se očekává právě ten pseudopolynomiální algoritmus

Keby som mal staticky pocet prvkov, tak okej, nahadzem tam 4 vnorene fory a idem, ale mozem tam mat tych poloziek aj 10.
Druhý výsledek Googlu na "knapsack problem bruteforce" používá rekurzi ve stylu
function solve(n, currentWeight, currentValue) {
# don't pack this item
solve(n-1, currentWeight, currentValue)
# pack this item
solve(n-1, currentWeight + w[n], currentValue + v[n])
}
Přijde mi to jako docela rozumný začátek. S trochou štěstí by to mohlo být i rychlejší než indikátorová funkce - na tu si zase dokážu představit nějaký šílený SSE/AVX udělátor, ale to v první iteraci asi fakt psát nechceš.