# A Dynamic Programming based Python
# Program for 0-1 Knapsack problem
# Returns the maximum value that can
# be put in a knapsack of capacity W
def knapSack(W, wt, val, n):
    K = [[0 for x in range(W + 1)] for x in range(n + 1)]

    # Build table K[][] in bottom up manner
    for i in range(n + 1):
        for w in range(W + 1):
            if i == 0 or w == 0:
                K[i][w] = 0
            elif wt[i - 1] <= w:
                K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w])
            else:
                K[i][w] = K[i - 1][w]

    return f"Maximum value possible is {K[n][W]}"


val = [100, 220, 330]  # val = values
wt = [5, 10, 25]  # wt = weight of each item
W = 50  # W = Maximum Weight
n = len(val)  # n = number of items
print(knapSack(W, wt, val, n))

# A Dynamic Programming based Python
# Program for 0-1 Knapsack problem
# Returns the maximum value that can
# be put in a knapsack of capacity W
def knapSack(W, wt, val, n):
    K = [[0 for x in range(W + 1)] for x in range(n + 1)]

    # Build table K[][] in bottom up manner
    for i in range(n + 1):
        for w in range(W + 1):
            if i == 0 or w == 0:
                K[i][w] = 0
            elif wt[i - 1] <= w:
                K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w])
            else:
                K[i][w] = K[i - 1][w]

    return f"Maximum value possible is {K[n][W]}"


val = [100, 220, 330]  # val = values
wt = [5, 10, 25]  # wt = weight of each item
W = 50  # W = Maximum Weight
n = len(val)  # n = number of items
print(knapSack(W, wt, val, n))

# A Dynamic Programming based Python # Program for 0-1 Knapsack problem # Returns the maximum value that can # be put in a knapsack of capacity W # Build table K[][] in bottom up manner # val = values # wt = weight of each item # W = Maximum Weight # n = number of items