# Python program to find ways to get n rupees with given coins

Suppose we have given a coins of denominations (1, 2, 5 and 10). We have to find in how many ways can we can arrange n using these dominations. We have an array called count with 4 elements, where count indicates number of coins of 1, count indicates number of coins for 2 and so on.

So, if the input is like n = 27 count = [8,4,3,2], then the output will be 18 so there are 18 possible combinations some of them are

• 10*2 + 5*1 + 2*1 = 27

• 10*2 + 2*3 + 1*1 = 27

• 10*1 + 5*3 + 2*1 = 27

• 10*1 + 5*1 + 4*2 + 4*1 = 27

and so on...

To solve this, we will follow these steps −

• denom := [1,2,5,10]
• A := an array of size (n + 1) and fill with 0
• B := a new list from A
• for i in range 0 to (minimum of count and n), do
• A[i] := 1
• for i in range 1 to 3, do
• for j in range 0 to count[i], do
• for k in range 0 to n + 1 - j *denom[i], do
• B[k + j * denom[i]] := B[k + j * denom[i]] + A[k]
• for j in range 0 to n, do
• A[j] := B[j]
• B[j] := 0
• return A[n]

## Example

Let us see the following implementation to get better understanding

denom = [1,2,5,10]

def solve(n, count):
A = [0 for _ in range(n+1)]
B = list(A)
for i in range(min(count, n) + 1):
A[i] = 1
for i in range(1, 4):
for j in range(0, count[i] + 1):
for k in range(n + 1 - j *denom[i]):
B[k + j * denom[i]] += A[k]
for j in range(0, n + 1):
A[j] = B[j]
B[j] = 0
return A[n]

n = 27
count = [8,4,3,2]
print(solve(n, count))

## Input

27, [8,4,3,2]


## Output

18