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: Accepted)

# class Array
#   def get(idx)
#     if 0 <= idx && idx < self.size
#       self.at(idx)
#     else
#       raise IndexError.new("index #{idx} outside of array bounds: 0...#{self.size}")
#     end
#   end
#
#   # NOTE: Overwrite
#   def [](idx)
#     get(idx)
#   end
# end


def make_2d_array(n, m, init)
  n.times.map{[init] * m}
end

def show_table(table)
  table.each{|row|
    puts(row.map(&:inspect).join(' '))
  }
end

def min(a, b)
  a < b ? a : b
end

n, _   = gets.split(' ').map(&:to_i)
# Available coins
coins = gets.split(' ').map(&:to_i)

# Initialize DP table
dp_table = make_2d_array(coins.size+1, n+1, 0) # (coins.size + 1).times{[nil] * (coins.size + 1)}
(1..n).each{|j|
  dp_table[0][j] = Float::INFINITY
}
dp_table[0][0] = 0


(1..coins.size).each{|i|
  (0..n).each{|j|
    coin = coins[i-1]
    if 0 <= j - coin
      dp_table[i][j] = min(dp_table[i-1][j], dp_table[i][j - coin] + 1)
    else
      dp_table[i][j] = dp_table[i-1][j]
    end
  }
}



puts(dp_table[-1][-1])