input: Write a python function to find the minimum number of coins needed to make a certain amount using given denominations.
  assert find_min_coins(11, [1, 2, 5]) == 3
  assert find_min_coins(30, [1, 3, 4]) == 8
  assert find_min_coins(0, [1, 5, 10]) == 0
  assert find_min_coins(7, [1, 3, 4, 5]) == 2
output: def find_min_coins(amount, denominations):
      # Initialize DP array with infinity for all values except 0 amount which needs 0 coins
      dp = [float('inf')] * (amount + 1)
      dp[0] = 0
      
      # Iterate over all amounts up to the given amount
      for i in range(1, amount + 1):
          # Check each denomination
          for coin in denominations:
              if i - coin >= 0:
                  dp[i] = min(dp[i], dp[i - coin] + 1)
      
      # If dp[amount] is still infinity, it means amount cannot be formed with given denominations
      return dp[amount] if dp[amount] != float('inf') else -1