Merge pull request #87 from Rastrian/dynamicprogramming-coinchange

[Dynamic Programming] Coin Change
This commit is contained in:
Vitor Oliveira 2021-02-28 13:53:48 -08:00 committed by GitHub
commit e75fd5b786
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -0,0 +1,30 @@
def coin_change_minimum(coins, amount)
dp = Array.new(amount+1,-1)
dp[0] = 0
coins.each do |coin|
(coin..amount).each do |i|
if dp[i-coin] != -1
dp[i] = -1 == dp[i] ? dp[i-coin]+1 : [dp[i],dp[i-coin]+1].min
end
end
end
dp[amount]
end
def coin_change_combinations(coins, amount)
dp = Array.new(coins.length+1) { Array.new(amount+1,0) }
dp[0][0] = 1
(1..coins.length).each do |i|
(0..amount).each do |j|
dp[i][j] = dp[i-1][j] + (j < coins[i-1] ? 0 : dp[i][j-coins[i-1]])
end
end
dp[coins.length][amount]
end
coins = Array[2,4,5]
amount = 12
puts "Number of combinations of getting change for " + amount.to_s + " is "+ coin_change_combinations(coins, amount).to_s + "."
puts "Minimum number of coins required for " + amount.to_s + " is "+ coin_change_minimum(coins, amount).to_s + "."