1503. 找零

1503. 找零

中文English

某国的货币系统包含面值 11 元、44 元、1616 元、6464 元共 44 种硬币,以及面值 10241024 元的纸币。
你现在使用 10241024 元的纸币购买了一件价值为 N, 0 < N <= 1024N,0<N<=1024 元的商品,请问最少会收到多少个硬币作为找零。

样例

样例输入1:
amount = 1014

样例输出1:
4

找零 2 个 4 元硬币,和 2 个 1 元硬币。
样例输入2:
amount = 1004

样例输出2:
2

找零 1 个 16 元硬币,1 个 4 元硬币。
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 

class Solution:
    """
    @param amount: The amount you should pay.
    @return: Return the minimum number of coins for change.
    """
    """
    大致思路:
    1.计算出1024 - amount,最少需要多少硬币,动态规划
    转移方程:dp[i] = min(dp[i - coin] + 1,dp[i])
    """
    def giveChange(self, amount):
        # write you code here.
        #初始化
        pay_back = 1024 - amount 
        coins = [1,4,16,64]
        l = pay_back + 1
        dp = [sys.maxsize for _ in range(l)]
        dp[0] = 0 

        #计算顺序
        for i in range(1, l):
            for coin in coins:
                if (i - coin) >= 0:
                    dp[i] = min(dp[i],dp[i - coin] + 1)
        
        return dp[pay_back]

 

posted @ 2020-06-15 00:06  风不再来  阅读(117)  评论(0编辑  收藏  举报