Problem:
Coin Changing Problem

Find the minimum number of coins to make change for n cents using coins of denominations d1, d2,.., dm. The coins can be used any number of times.

Input

n m
d1 d2 ... dm

Two integers n and m are given in the first line. The available denominations are given in the second line.

Output

Print the minimum number of coins in a line.

Constraints

1 ≤ n ≤ 50000

1 ≤ m ≤ 20

1 ≤ denomination ≤ 10000

The denominations are all different and contain 1.

Sample Input 1

55 4
1 5 10 50

Sample Output 1

2

Sample Input 2

15 6
1 2 7 8 12 50

Sample Output 2

2

Sample Input 3

65 6
1 2 7 8 12 50

Sample Output 3

3

Solution in Python3 (judge verdict: Time Limit Exceeded)

#coding: cp932

n, m = input().split()
n = int(n)
m = int(m)

c = []
c = input().split()
for i in range(0,m):
	c[i] = int(c[i])
d = c[:]
c.reverse()

y = n
min = 0
while 1:
	if len(d) == 0:
		break
	if y < max(d):
		d.pop()
	else:
		min += int(y/max(d))
		y = y % max(d)
		d.pop()

#print(min)

memo = []
for i in range(0,min+1):
	memo.append(0)

#min = 100000000
depth = 0

def select(sum):
	global min
	global depth
	global memo
	done = []
	
	if depth > min:
		depth -= 1
		return min
	
#	if memo[depth] > 0:
#		depth -= 1
#		return min
	
	for i in c:
#		if i in done:
#			continue
		sum += i
		done.append(i)
#		print(min, "/", sum, "/", depth, done)
		if sum == n:
			if depth + 1 < min:
				min = depth + 1
			sum -= i
		elif sum > n:
			sum -= i
			continue
		else:
			depth += 1
			sum -= i
			min = select(sum+i)
	memo[depth] = min
	depth -= 1
	return min

select(0)

print(min)