"""simple docstring"""






from __future__ import annotations

lowerCAmelCase__    :    Tuple			=      """Alexander Joslin"""



def     a_		(   lowerCamelCase			):


				if number <= 0:
								UpperCAmelCase__			 =				f'''n must be greater than 0. Got n = {number}'''
								raise ValueError(lowerCAmelCase_			)

				UpperCAmelCase__			 =				[number + 1] * (number + 1)

				# starting position
				UpperCAmelCase__			 =				0
				for i in range(1   ,     lowerCAmelCase_			):
								UpperCAmelCase__			 =				min(table[i + 1]   ,     table[i] + 1			)
								# check if out of bounds
								if i * 2 <= number:
												UpperCAmelCase__			 =				min(table[i * 2]   ,     table[i] + 1			)
								# check if out of bounds
								if i * 3 <= number:
												UpperCAmelCase__			 =				min(table[i * 3]   ,     table[i] + 1			)
				return table[number]


if __name__ == "__main__":
						import doctest

						doctest.testmod()








'''simple docstring'''






def        snake_case_   (	lowerCAmelCase_			,  lowerCAmelCase_						)->						Union[str, Any]:





       '''simple docstring'''


       if n < 0:
              return 0
       # table[i] represents the number of ways to get to amount i
       _UpperCAmelCase    :		Union[str, Any]     	=					[0] * (n + 1)

       # There is exactly 1 way to get to zero(You pick no coins).
       _UpperCAmelCase    :		Optional[int]     	=					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(lowerCAmelCase_			,  n + 1						):
                     table[j] += table[j - coin_val]

       return table[n]


if __name__ == "__main__":
   import doctest

   doctest.testmod()



