I've been reviewing some dynamic programming problems, and I have had hard time wrapping my head around some code in regards to finding the smallest number of coins to make change.
Say we have coins worth 25, 10, and 1, and we are making change for 30. Greedy would return 25 and 5(1) while the optimal solution would return 3(10). Here is the code from the book on this problem:
def dpMakeChange(coinValueList,change,minCoins):
for cents in range(change+1):
coinCount = cents
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
minCoins[cents] = coinCount
return minCoins[change]
If anyone could help me wrap my head around this code (line 4 is where I start to get confused), that would be great. Thanks!
minCoins? Anyway, trying to solve this in general is equivalent to the knapsack problem(or maybe even worse), so finding the optimal solution in any case gets troublesome really fast. The solution probably depends on the coins you can use.for variable in [l for l in list_comprehension]is subjectively bad, only because I haven't seen it much...ifand acontinueon the next line, but whatevs.