Challenge: Number of Ways to Represent N Dollars

In this lesson you will write an algorithm to solve a famous dynamic programming problem, finding the number of ways to represent an amount using bills and coins.

Problem statement

Given a list of currency bills, you are required to count the number of ways in which you can represent a certain amount. For example, if you have only two kinds of bills, $10 and $20, and you want to represent $30, there are only two ways:

  • 3 bills of $10
  • 1 bill of $20 and 1 bill of $10.


You will get a list of currency bills and the amount you are required to make as input. You have to count the number of ways the amount can be made using the currency bills provided in the bills list.

bills = [10, 20]
amount = 30


Your program should return the count of the number of ways amount can be represented using dollar bills given to you in the list bills.

countways([10, 20], 30) = 2

Coding challenge

As you design the algorithm take special care that you do not overcount. $30 can be represented with $20+$10 as well as $10+$20, but these are the same thing. Therefore, you should not count both cases.

A simple recursive solution will timeout for large inputs, thus, you should try to write a dynamic programming algorithm. Start with a recursive solution and build up to a dynamic solution. Your solution may use a top-down or bottom-up approach. Set stressTesting to False to test your simple recursive solution.

Get hands-on with 1200+ tech skills courses.