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 Ruby (judge verdict: Runtime Error)

#Coin Changing Problem

debug = false

unless debug
    @n,@m = STDIN.gets.split(" ").collect{|e| e.to_i}
    @ds = STDIN.gets.split(" ").collect{|e| e.to_i}
else
#    @n = 50000
#    @m = 20
#    @ds = "1 92 1377 3168 7095 1170 1809 5046 3225 1054 4016 142 108 6430 3970 48 8416 4909 114 6968".split(" ").collect{|e| e.to_i}
    @n = 50000
    @m = 20
    @ds = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20".split(" ").collect{|e| e.to_i}.sort { |x,y| y <=> x }
end

@min = (@ds - [1]).min


@dp = Array.new(@m){Array.new(@n)}

def rec(index,left)

    return 0 if left == 0
    return 50000 if left < 0 
    return left if left < @min
    return 50000 if index == @m
    unless @dp[index][left] == nil
        return @dp[index][left]         
    end

    v0 = rec(index,left - @ds[index]) + 1 # incdlue more than one
#    v1 = rec(index + 1, left - @ds[index],history + index.to_s) + 1 # include just one
    v2 = rec(index + 1, left) # not include

    v = [v0,v2].min

   @dp[index][left] = v
    return v
end


puts rec(1,@n)
exit 0