
'''simple docstring'''





def 							snake_case				(		UpperCAmelCase   ,	UpperCAmelCase						)->      int:







      """simple docstring"""
      if n < 0:
            return 0
      # table[i] represents the number of ways to get to amount i
      __A													=      [0] * (n + 1)

      # There is exactly 1 way to get to zero(You pick no coins).
      __A													=      1

      # Pick all coins one by one and update table[] values
      # after the index greater than or equal to the value of the
      # picked coin
      for coin_val in s:
            for j in range(UpperCAmelCase   ,	n + 1						):
                  table[j] += table[j - coin_val]

      return table[n]


if __name__ == "__main__":
 import doctest

 doctest.testmod()










from __future__ import annotations







def 	A (		A__		,		A__		,		A__		,		A__			):

     # Base Case
     if counter == 0 or capacity == 0:
          return 0

     # If weight of the nth item is more than Knapsack of capacity,
     #   then this item cannot be included in the optimal solution,
     # else return the maximum of two cases:
     #   (1) nth item included
     #   (2) not included
     if weights[counter - 1] > capacity:
          return knapsack(A__		,		A__		,		A__		,		counter - 1			)
     else:
          UpperCAmelCase    :					List[str]			=      capacity - weights[counter - 1]
          UpperCAmelCase    :					Tuple			=      values[counter - 1] + knapsack(
              A__		,		A__		,		A__		,		counter - 1			)
          UpperCAmelCase    :					Optional[int]			=      knapsack(A__		,		A__		,		A__		,		counter - 1			)
          return max(A__		,		A__			)


if __name__ == "__main__":
      import doctest

      doctest.testmod()



