summaryrefslogtreecommitdiff
path: root/lib/coins.rb
blob: a555de98bd174a9fb015c02fd6bd1bb774119cec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require 'pp'
# https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/#!

def coins(values, sum)
  min = Array.new(sum + 1, Float::INFINITY)
  min[0] = 0

  for i in (0..sum)
    for j in (0..(values.size - 1))
      break if values[j] > i
      coin = values[j]

      if min[i - coin] + 1 < min[i]
        min[i] = min[i - coin] + 1
      end
    end
  end
  min.last
end

PP.pp coins([1, 3, 5], 11)