#有面值分别为1,3,5的三种硬币若干, # 需要凑成11元最少需要多少硬币, # 凑成n元最少需要多少硬币? #动态规划算法:最优子结构 边界 状态转移方程 def dynamic(amount): num=[1,3,5] #设置一个字典存储{钱数,硬币个数} dict={0:0} for i in range(1,amount+1): #硬币个数肯定不会大于钱数,我们设置为amount+1,如果后期没有匹配则值还为amount+1,比较好判断 dict[i] = amount+1 for j in num: if j <= i: #最优子结构 状态转移方程 边界 dict[i] = min(dict[i], dict[i - j] + 1) if dict[amount] == amount+1: return -1 else: print(dict) print(dict[amount]) if __name__ : amount=5 dynamic(amount)
动态规划问题 硬币问题 Python实现
最新推荐文章于 2024-10-06 14:15:59 发布