input: Write a function to solve the knapsack problem using dynamic programming. The function should return the maximum value that can be put in a knapsack of a given capacity, given a list of items with their values and weights. The function should be named knapSack and should take four parameters: W (the capacity of the knapsack), wt (a list of weights of the items), val (a list of values of the items), and n (the number of items). If the number of items is 0 or the capacity is 0, the function should return 0. If the weight of the current item exceeds the capacity, that item should not be included in the optimal solution. Otherwise, the function should return the maximum value obtained by including or excluding the current item.
  assert knapSack(50, [10, 20, 30], [60, 100, 120], 3)==220
  assert knapSack(30, [10, 20, 30], [60, 100, 120], 3)==160
  assert knapSack(10, [10, 20, 30], [60, 100, 120], 3)==60
  assert knapSack(0, [10, 20, 30], [60, 100, 120], 3)==0
  assert knapSack(50, [50, 30, 20], [60, 50, 40], 3)==90
output: def knapSack(W, wt, val, n):
      if n == 0 or W == 0:
          return 0
      dp = [[0 for _ in range(W + 1)] for _ 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]