master
1require 'pp'
2# https://www.topcoder.com/community/data-science/data-science-tutorials/dynamic-programming-from-novice-to-advanced/#!
3
4def coins(values, sum)
5 min = Array.new(sum + 1, Float::INFINITY)
6 min[0] = 0
7
8 for i in (0..sum)
9 for j in (0..(values.size - 1))
10 break if values[j] > i
11 coin = values[j]
12
13 if min[i - coin] + 1 < min[i]
14 min[i] = min[i - coin] + 1
15 end
16 end
17 end
18 min.last
19end
20
21PP.pp coins([1, 3, 5], 11)