Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
17
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-1.hs
Normal file
17
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-1.hs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
inv = [("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), ("cream",11,70), ("camera",32,30),
|
||||
("tshirt",24,15), ("trousers",48,10), ("umbrella",73,40), ("trousers",42,70),
|
||||
("overclothes",43,75), ("notecase",22,80), ("sunglasses",7,20), ("towel",18,12),
|
||||
("socks",4,50), ("book",30,10)]
|
||||
|
||||
-- get all combos of items under total weight sum; returns value sum and list
|
||||
combs [] _ = [ (0, []) ]
|
||||
combs ((name,w,v):rest) cap = combs rest cap ++
|
||||
if w > cap then [] else map (prepend (name,w,v)) (combs rest (cap - w))
|
||||
where prepend (name,w,v) (v2, lst) = (v2 + v, (name,w,v):lst)
|
||||
|
||||
main = do
|
||||
putStr "Total value: "; print value
|
||||
mapM_ print items
|
||||
where (value, items) = maximum $ combs inv 400
|
||||
15
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-2.hs
Normal file
15
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-2.hs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
inv = [("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), ("cream",11,70), ("camera",32,30),
|
||||
("tshirt",24,15), ("trousers",48,10), ("umbrella",73,40), ("trousers",42,70),
|
||||
("overclothes",43,75), ("notecase",22,80), ("sunglasses",7,20), ("towel",18,12),
|
||||
("socks",4,50), ("book",30,10)]
|
||||
|
||||
combs [] _ = (0, [])
|
||||
combs ((name,w,v):rest) cap
|
||||
| w <= cap = max skipthis $ prepend (name,w,v) (combs rest (cap - w))
|
||||
| otherwise = skipthis
|
||||
where prepend (name,w,v) (v2, lst) = (v2 + v, (name,w,v):lst)
|
||||
skipthis = combs rest cap
|
||||
|
||||
main = do print $ combs inv 400
|
||||
13
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-3.hs
Normal file
13
Task/Knapsack-problem-0-1/Haskell/knapsack-problem-0-1-3.hs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
inv = [("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), ("cream",11,70), ("camera",32,30),
|
||||
("tshirt",24,15), ("trousers",48,10), ("umbrella",73,40),
|
||||
("waterproof trousers",42,70), ("overclothes",43,75), ("notecase",22,80),
|
||||
("sunglasses",7,20), ("towel",18,12), ("socks",4,50), ("book",30,10)]
|
||||
|
||||
knapsack = foldr addItem (repeat (0,[])) where
|
||||
addItem (name,w,v) list = left ++ zipWith max right newlist where
|
||||
newlist = map (\(val, names)->(val + v, name:names)) list
|
||||
(left,right) = splitAt w list
|
||||
|
||||
main = print $ (knapsack inv) !! 400
|
||||
Loading…
Add table
Add a link
Reference in a new issue