"""Given weights and values of n items, put these items in a knapsack of capacity W to get the maximum total value in the knapsack."""def MF_knapsack(i,wt,val,j):'''This code involves the concept of memory functions. Here we solve the subproblems which are neededunlike the below exampleF is a 2D array with -1s filled up'''global F # a global dp table for knapsackif F[i][j] < 0:if j < wt[i - 1]:val = MF_knapsack(i - 1,wt,val,j)else:val = max(MF_knapsack(i - 1,wt,val,j),MF_knapsack(i - 1,wt,val,j - wt[i - 1]) + val[i - 1])F[i][j] = valreturn F[i][j]def knapsack(W, wt, val, n):dp = [[0 for i in range(W+1)]for j in range(n+1)]for i in range(1,n+1):for w in range(1,W+1):if(wt[i-1]<=w):dp[i][w] = max(val[i-1]+dp[i-1][w-wt[i-1]],dp[i-1][w])else:dp[i][w] = dp[i-1][w]return dp[n][w]if __name__ == '__main__':'''Adding test case for knapsack'''val = [3,2,4,4]wt = [4,3,2,3]n = 4w = 6F = [[0]*(w + 1)] + [[0] + [-1 for i in range(w + 1)] for j in range(n + 1)]print(knapsack(w,wt,val,n))print(MF_knapsack(n,wt,val,w)) # switched the n and w
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。