博客
关于我
蓝桥杯包子凑数(贝祖定理-动态规划)
阅读量: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/

    你可能感兴趣的文章
    POSIX与程序可移植性
    查看>>
    posix多线程有感--自旋锁
    查看>>
    SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)
    查看>>
    POSIX标准和XSI扩展
    查看>>
    post install error,please remove node_moules before retry
    查看>>
    postcss-pxtorem 参数之selectorBlackList、exclude的用法
    查看>>
    Postek博思得标签打印机更换电脑,打印出来标签空白
    查看>>
    postfix+ dovecot搭建邮件服务器
    查看>>
    postfix在邮件服务器中的使用
    查看>>
    PostGIS 3.1.2软件安装详细教程(地图工具篇.8)
    查看>>
    PostGIS中获取所有EPSG的编码以及对应Proj4字符串
    查看>>
    PostGIS在Windows上的下载与安装
    查看>>
    Qt开发——网络编程之UDP客户端
    查看>>
    postgis数据库优化_postgresql 性能优化
    查看>>
    postgis求面积、交集等相关函数
    查看>>
    postgis相关函数
    查看>>
    Postgres Docker版本安装mysql_fdw 插件
    查看>>
    Postgres invalid command \N数据恢复处理
    查看>>
    Postgres like 模糊查询匹配集合
    查看>>
    Postgres 自定义函数内实现 in 操作符的递归查询
    查看>>