include c:\cxpl\codes; \include 'code' declarations int Item, Items, Weights, Values, BestItems, BestValues, I, W, V, N; def Tab=9; def Name, Weight, Value; [Item:= [["map ", 9, 150], ["compass ", 13, 35], ["water ", 153, 200], ["sandwich ", 50, 160], ["glucose ", 15, 60], ["tin ", 68, 45], ["banana ", 27, 60], ["apple ", 39, 40], ["cheese ", 23, 30], ["beer ", 52, 10], ["suntan cream ", 11, 70], ["camera ", 32, 30], ["T-shirt ", 24, 15], ["trousers ", 48, 10], ["umbrella ", 73, 40], ["waterproof trousers ", 42, 70], ["waterproof overclothes", 43, 75], ["note-case ", 22, 80], ["sunglasses ", 7, 20], ["towel ", 18, 12], ["socks ", 4, 50], ["book ", 30, 10]]; BestValues:= 0; for Items:= 0 to 1<<22-1 do \for all possible combinations of Items... [I:= Items; W:= 0; V:= 0; N:= 0; while I do \add weights and values for each item (bit in I) [if I&1 then [W:= W + Item(N,Weight); V:= V + Item(N,Value)]; I:= I>>1; N:= N+1; ]; if V>BestValues & W<=400 then \save best combination found so far [BestValues:= V; BestItems:= Items]; ]; I:= BestItems; W:= 0; V:= 0; N:= 0; \show best combination of items while I do [if I&1 then [Text(0, " "); Text(0, Item(N,Name)); ChOut(0, Tab); IntOut(0, Item(N,Weight)); ChOut(0, Tab); IntOut(0, Item(N,Value)); CrLf(0); W:= W + Item(N,Weight); V:= V + Item(N,Value); ]; I:= I>>1; N:= N+1; ]; Text(0, "Totals: "); IntOut(0, W); ChOut(0, Tab); IntOut(0, V); CrLf(0); ]