[파이썬 동적 프로그래밍] 변경 문제

동적 프로그래밍 - 변경 문제

문제 설명

  • 알려진 코인 시스템 하에서 변경에 필요한 코인의 수가 가장 적습니다.

문제 해결 아이디어

  • 문제의 최적해에는 작은 문제의 최적해가 포함되어 있으며, 이는 동적 프로그래밍 전략을 사용하여 최적화 문제를 해결하는 데 필요한 조건입니다.
  • 이 문제를 해결하기 위해서는 액면가가 작은 코인의 개수를 순차적으로 알아낸 후, 이를 토대로 최적화하는 것입니다.

암호

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