【python动态规划】找零问题

动态规划-找零问题

问题描述

  • 在已知的硬币体系下,要求找零结果中,硬币的个数最小

解题思路

  • 问题的最优解包含了更小问题的最优解,这是一个最优化问题能够使用动态规划策略解决的必要条件。
  • 针对此问题,就是依次找出更小面值的零钱找零个数,在此基础上再进行优化。

代码实现

def dpMakeChange(coinValuelist, change, minCoins):
    """
    :coinValuelist: 硬币体系
    :change: 找零数
    :minCoins: 动态规划初始化列表
    """
    # 从1开始到change逐个计算最少硬币数
    for cents in range(1, change+1):
        # 1、初始化一个最大值
        coinCount = cents
        # 2、减去每个硬币,向后查最少硬币数,同时记录总的最少数
        for j in [c for c in coinValuelist if c<= cents]:
            if minCoins[cents - j] + 1 < coinCount:
                coinCount = minCoins[cents - j] + 1
        # 3、得到当前最少硬币数,记录到表中
        minCoins[cents] = coinCount
    # 返回最后一个结果
    return minCoins[change]

print(dpMakeChange([1,5,10,21,25], 63, [0]*64))

猜你喜欢

转载自blog.csdn.net/qq_38734327/article/details/132352592