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

    你可能感兴趣的文章
    php/jsp/asp的区别
    查看>>
    php20个主流框架
    查看>>
    php301到https,虚拟主机设置自动301跳转到HTTPS
    查看>>
    php5 apache 配置
    查看>>
    php5 升级 php7 版本遇到的问题处理方法总结
    查看>>
    PHP5.3.3安装Mcrypt扩展
    查看>>
    PHP5.4 + IIS + Win2008 R2 配置
    查看>>
    PHP5.4 pfsocketopen函数判断sock是否存活的bug(由memcached引起)
    查看>>
    Redis从入门到精通
    查看>>
    PHP5.6.x编译报错:Don't know how to define struct flock on this system, set --enable-opcache=no
    查看>>
    php5ts.dll 下载_php5ts.dll下载
    查看>>
    php7
    查看>>
    PHP7 新特性
    查看>>
    PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
    查看>>
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>