From 94324e91b439fb24704707f3ed20ff2e607acee4 Mon Sep 17 00:00:00 2001 From: Srikumar Sastry Date: Fri, 19 Oct 2018 18:51:40 +0530 Subject: [PATCH] Create FractionalKnapsack.py (#438) --- dynamic_programming/FractionalKnapsack.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 dynamic_programming/FractionalKnapsack.py diff --git a/dynamic_programming/FractionalKnapsack.py b/dynamic_programming/FractionalKnapsack.py new file mode 100644 index 000000000..74e85b4b4 --- /dev/null +++ b/dynamic_programming/FractionalKnapsack.py @@ -0,0 +1,12 @@ +from itertools import accumulate +from bisect import bisect + +def fracKnapsack(vl, wt, W, n): + + r = list(sorted(zip(vl,wt), key=lambda x:x[0]/x[1],reverse=True)) + vl , wt = [i[0] for i in r],[i[1] for i in r] + acc=list(accumulate(wt)) + k = bisect(acc,W) + return 0 if k == 0 else sum(vl[:k])+(W-acc[k-1])*(vl[k])/(wt[k]) if k!=n else sum(vl[:k]) + +print("%.0f"%fracKnapsack([60, 100, 120],[10, 20, 30],50,3))