换钱最少货币数_python3

换钱的最少货币数

http://www.nowcoder.com/questionTerminal/4e05294fc5aa4d4fa8eacef2e606e5a8

暴力效率较低,而且需要循环计算知道找到有解的情况,下面只是个错误的例子

def solve(l, n, k):
    if n < 1:
        return 0
    count = 0
    for i in l:
        count += k//i
        k %= i
        if not k:
            break
    return count if not k else -1

while True:
    try:
        n, k = map(int, input().split())
        l = list(map(int, input().split()))
        l = sorted(l, reverse=True)
        print(solve(l, n, k))
    except EOFError:
        break

动态规划,背包九讲有详细描述,与传统的背包本质是一样的,每件物品的价值和容量正好对应货币值和1,固定容量与固定总货币值,需要注意装满的情况初始化只有第0个状态有效,求最小初始化用最大值且用min,反之反之,排不排序都可以

MAX = 1001
def solve(l, n, k):
    c = [MAX]*(k+1)
    c[0] = 0
    for i in range(n):
        for v in range(l[i], k+1):
            c[v] = min(c[v], c[v-l[i]]+1)
    return c[k] if c[k] != MAX else -1

while True:
    try:
        n, k = map(int, input().split())
        l = list(map(int, input().split()))
        print(solve(l, n, k))
    except EOFError:
        break
全部评论

相关推荐

01-07 11:46
Java
如图:也是让我遇到逆天公司了,实习生是按天给工资,不忙直接强制休假了
baskly:公司为北京超图软件股份有限公司武汉分公司,明年公司应该会招新实习生,刷到的小伙伴快跑
点赞 评论 收藏
分享
2025-11-28 16:13
门头沟学院 Java
程序员小白条:年底了,都差不多了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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