Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
71
Task/Knapsack-problem-0-1/Erlang/knapsack-problem-0-1.erl
Normal file
71
Task/Knapsack-problem-0-1/Erlang/knapsack-problem-0-1.erl
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
-module(knapsack_0_1).
|
||||
|
||||
-export([go/0,
|
||||
solve/5]).
|
||||
|
||||
-define(STUFF,
|
||||
[{"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}
|
||||
]).
|
||||
|
||||
-define(MAX_WEIGHT, 400).
|
||||
|
||||
go() ->
|
||||
StartTime = os:timestamp(),
|
||||
{ItemList, TotalValue, TotalWeight} =
|
||||
solve(?STUFF, ?MAX_WEIGHT, [], 0, 0),
|
||||
TimeElapsed = timer:now_diff(os:timestamp(), StartTime),
|
||||
io:format("Items: ~n"),
|
||||
[io:format("~p~n", [Item]) || Item <- ItemList],
|
||||
io:format(
|
||||
"Total value: ~p~nTotal weight: ~p~nTime elapsed in milliseconds: ~p~n",
|
||||
[TotalValue, TotalWeight, TimeElapsed/1000]).
|
||||
|
||||
solve([], _TotalWeight, ItemAcc, ValueAcc, WeightAcc) ->
|
||||
{ItemAcc, ValueAcc, WeightAcc};
|
||||
solve([{_Item, ItemWeight, _ItemValue} | T],
|
||||
TotalWeight,
|
||||
ItemAcc,
|
||||
ValueAcc,
|
||||
WeightAcc) when ItemWeight > TotalWeight ->
|
||||
solve(T, TotalWeight, ItemAcc, ValueAcc, WeightAcc);
|
||||
solve([{ItemName, ItemWeight, ItemValue} | T],
|
||||
TotalWeight,
|
||||
ItemAcc,
|
||||
ValueAcc,
|
||||
WeightAcc) ->
|
||||
{_TailItemAcc, TailValueAcc, _TailWeightAcc} = TailRes =
|
||||
solve(T, TotalWeight, ItemAcc, ValueAcc, WeightAcc),
|
||||
{_HeadItemAcc, HeadValueAcc, _HeadWeightAcc} = HeadRes =
|
||||
solve(T,
|
||||
TotalWeight - ItemWeight,
|
||||
[ItemName | ItemAcc],
|
||||
ValueAcc + ItemValue,
|
||||
WeightAcc + ItemWeight),
|
||||
|
||||
case TailValueAcc > HeadValueAcc of
|
||||
true ->
|
||||
TailRes;
|
||||
false ->
|
||||
HeadRes
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue