2020字节跳动:找零[python][动态规划][贪心]

找零

http://www.nowcoder.com/questionTerminal/944e5ca0ea88471fbfa73061ebe95728

  1. 模拟+贪心

因为存在一元硬币,一定可以找清,所以直接贪心

N = int(input())
remain, cnt = 1024-N, 0
coins = [64, 16, 4] # coins which values greater than 1
for i in range(len(coins)):
    c = remain//coins[i]
    cnt += c
    remain -= c*coins[i]
print(remain + cnt)

  1. 动态规划

若可能不能找清,或不存在1元硬币这种简单情况,用动态规划会更合适。

N = int(input())
remain = 1024-N
coins = [2, 4, 16, 64]
# dp[i] 还剩i元未找清时的最优解
dp = [float('inf') for i in range(remain+1)]
dp[0] = 0

for i in range(remain+1):
    for c in coins:
        dp[i] = min(dp[i-c]+1, dp[i]) if i >= c else dp[i]

print(dp[-1]) # 若无法找清,则会等于float('inf')
全部评论

相关推荐

点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
昨天 10:17
仰恩大学 营销
bg双非,被挂了
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务