# C Program Coin Change

Given a value N, if we want to make change for N cents, and we have infinite supply of each of S = { S1, S2, .. , Sm} valued coins, how many ways can we make the change? The order of coins doesn\’t matter.

For example, for N = 4 and S = {1,2,3}, there are four solutions: {1,1,1,1},{1,1,2},{2,2},{1,3}. So output should be 4. For N = 10 and S = {2, 5, 3, 6}, there are five solutions: {2,2,2,2,2}, {2,2,3,3}, {2,2,6}, {2,3,5} and {5,5}. So the output should be 5.

## C

 `// C program for coin change problem. ` `#include ` ` `  `int` `count( ``int` `S[], ``int` `m, ``int` `n ) ` `{ ` `    ``int` `i, j, x, y; ` ` `  `    ``// We need n+1 rows as the table is constructed  ` `    ``// in bottom up manner using the base case 0 ` `    ``// value case (n = 0) ` `    ``int` `table[n+1][m]; ` `    `  `    ``// Fill the enteries for 0 value case (n = 0) ` `    ``for` `(i=0; i= 0)? table[i - S[j]][j]: 0; ` ` `  `            ``// Count of solutions excluding S[j] ` `            ``y = (j >= 1)? table[i][j-1]: 0; ` ` `  `            ``// total count ` `            ``table[i][j] = x + y; ` `        ``} ` `    ``} ` `    ``return` `table[n][m-1]; ` `} ` ` `  `// Driver program to test above function ` `int` `main() ` `{ ` `    ``int` `arr[] = {1, 2, 3}; ` `    ``int` `m = ``sizeof``(arr)/``sizeof``(arr[0]); ` `    ``int` `n = 4; ` `    ``printf``(``" %d "``, count(arr, m, n)); ` `    ``return` `0; ` `} `

Output:

`4`

Time Complexity: O(mn)

Following is a simplified version of method 2. The auxiliary space required here is O(n) only.

## C

 `int` `count( ``int` `S[], ``int` `m, ``int` `n ) ` `{ ` `    ``// table[i] will be storing the number of solutions for ` `    ``// value i. We need n+1 rows as the table is constructed ` `    ``// in bottom up manner using the base case (n = 0) ` `    ``int` `table[n+1]; ` ` `  `    ``// Initialize all table values as 0 ` `    ``memset``(table, 0, ``sizeof``(table)); ` ` `  `    ``// Base case (If given value is 0) ` `    ``table[0] = 1; ` ` `  `    ``// Pick all coins one by one and update the table[] values ` `    ``// after the index greater than or equal to the value of the ` `    ``// picked coin ` `    ``for``(``int` `i=0; i

Please refer complete article on Dynamic Programming | Set 7 (Coin Change) for more details!

My Personal Notes arrow_drop_up
Article Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.