input: Write a function to calculate the maximum possible revenue from the items with given weights and values. The function should use the knapsack algorithm to determine the maximum value that can be obtained without exceeding the knapsack's capacity. If the weights or values are empty, the function should return 0.
  
  assert knapsack([2, 1, 3], [4, 2, 3], 3)==7
  assert knapsack([1, 3, 4], [1, 4, 5], 3)==6
  assert knapsack([1, 2, 3], [6, 10, 12], 3)==22
  assert knapsack([], [], 0)==0
  assert knapsack([1, 2, 3], [1, 2, 3], 3)==5
output: def knapsack(weights, values, capacity):
      if not weights or not values:
          return 0
      n = len(weights)
      dp = [[0] * (capacity + 1) for _ in range(n + 1)]
      
      for i in range(1, n + 1):
          for w in range(capacity + 1):
              if weights[i - 1] <= w:
                  dp[i][w] = max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1])
              else:
                  dp[i][w] = dp[i - 1][w]
      
      return dp[n][capacity]