问题
解题思路
用递归求解,递归结束条件是当coins中的硬币全部被考虑过(i==n),此时若target为零,则表明正好凑齐所需的总额,全局变量res加一。当i<n时,当前考虑的硬币为coins[i],可以选取t枚该硬币(t从零开始递增),且需保证选取t枚该硬币后剩余的target值不为负且剩余的可选硬币数不为负。
代码
coins=[10,50,100,500]
n=len(coins)
res=0
def dfs(target,i,usable):
global res
if i==n:
res+=1 if target==0 else 0
return
coin=coins[i]
t=0
while target-t*coin>=0 and usable-t>=0:
dfs(target-t*coin,i+1,usable-t)
t+=1
dfs(1000,0,15)
print(res)