博客
关于我
蓝桥杯包子凑数(贝祖定理-动态规划)
阅读量:365 次
发布时间:2019-03-04

本文共 899 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要找出包子大叔无法凑出的包子数量。如果这些数量有无限多个,则输出INF;否则,输出具体数量。

方法思路

  • 问题分析

    • 包子大叔需要凑出顾客想买的包子数量。每种蒸笼能放Ai个包子,所有蒸笼的包子数最大公约数为g。
    • 如果g不等于1,则无法凑出的包子数量有无限多个,输出INF。
    • 如果g等于1,使用动态规划找出无法凑出的包子数量。
  • 关键思路

    • 计算所有蒸笼包子数的最大公约数g。
    • 如果g不等于1,输出INF。
    • 否则,使用动态规划解决“不可分割的硬币问题”。
  • 算法选择与优化

    • 计算最大公约数使用欧几里得算法。
    • 动态规划解决无法凑出的包子数量问题,避免重复计算。
  • 解决代码

    def gcd(a, b):    while b != 0:        a, b = b, a % b    return aN = int(input())baozi = [int(input()) for _ in range(N)]g = baozi[0]for num in baozi[1:]:    g = gcd(g, num)if g != 1:    print("INF")else:    max_size = 100001    dp = [0] * max_size    dp[0] = 1    for num in baozi:        for j in range(max_size - num):            if dp[j]:                dp[j + num] = 1    res = sum(1 for x in dp if x == 0)    print(res)

    代码解释

  • 计算最大公约数

    • 使用欧几里得算法计算所有蒸笼包子数的最大公约数g。
  • 动态规划初始化

    • 初始化dp数组,dp[0] = 1表示可以凑出0个包子。
  • 更新dp数组

    • 对于每个蒸笼的包子数num,更新dp数组,标记可以凑出的包子数量。
  • 统计结果

    • 统计无法凑出的包子数量,即dp数组中为0的位置的数量。
  • 通过以上方法,我们可以高效地解决问题并输出结果。

    转载地址:http://dbwg.baihongyu.com/

    你可能感兴趣的文章
    PyTorch之torch.utils.data.DataLoader解读
    查看>>
    PyTorch之DataLoader杂谈
    查看>>
    presto、druid、sparkSQL、kylin的对比分析
    查看>>
    Presto分布式大数据查询引擎
    查看>>
    Presto架构及原理
    查看>>
    Presto(一)集群部署
    查看>>
    Presto(二)开启安全认证
    查看>>
    Pricing procedure Steps and Details in SAP MM (from SCN)
    查看>>
    Prim 算法在不同权重范围内的性能分析及其实现
    查看>>
    Primace 5.0软件与KEIL单片机软件联合在线仿真步骤
    查看>>
    Prime Distance
    查看>>
    Prim求MST最小生成树
    查看>>
    Prim算法与Kruskal算法在均匀分布权重图中的性能比较
    查看>>
    Prim算法在加权连通图中的简单实现
    查看>>
    Prim算法详解及C代码示例
    查看>>
    pytorch中让数组显示更多的数字 torch.set_printoptions参数详解 numpy也是这个函数
    查看>>
    pringBoot Controller接收参数的几种常用方式
    查看>>
    printf()函数
    查看>>
    PyTorch中的自定义权重初始化
    查看>>
    printf格式字符串和输出列表个数及类型不匹配案例
    查看>>