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: Wrong Answer)

#Coin Changing Problem

debug = true

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}.reverse
end




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

def rec(index,left)

    return 0 if left == 0
    return 50000 if index == @m || left < 0
    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

require 'benchmark'


Benchmark.bm do |x|
  x.report { 

    v = rec(0,@n)
    if v < 50000
       puts v 
    else
       puts @n
    end
      }
end