程序员的算法趣题(python解法)-02:还在用现金支付吗

问题

在这里插入图片描述

解题思路

用递归求解,递归结束条件是当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)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值