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

    你可能感兴趣的文章
    redis报错
    查看>>
    php 删除包含某一字符的数组元素
    查看>>
    Redis学习总结(19)——Redis 5种集群方式对比
    查看>>
    php 反射
    查看>>
    php 处理 大并发
    查看>>
    php 大文件上传
    查看>>
    php 子进程监听消息,swoole学习笔记之多线程端口监听问题记录 多进程epoll模式...
    查看>>
    PHP 学习笔记 (四)
    查看>>
    Redis入门概述
    查看>>
    php 实现Iterator 接口
    查看>>
    PHP 实现N阶矩阵相乘
    查看>>
    php 实现进制转换(二进制、八进制、十六进制)互相转换
    查看>>
    PHP 实现页面跳转的三种方式及详细解析
    查看>>
    php 将XML对象转化为数组
    查看>>
    PHP 工具
    查看>>
    php 常用方法
    查看>>
    PHP 并发扣款,保证数据一致性(悲观锁和乐观锁)
    查看>>
    php 延迟静态绑定static关键字
    查看>>
    php 引用 -
    查看>>
    Redis入门
    查看>>