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

    你可能感兴趣的文章
    oracle partition by list,深入解析partition-list 分区
    查看>>
    Oracle PL/SQL Dev工具(破解版)被植入勒索病毒的安全预警及自查通告
    查看>>
    oracle pl/sql 导出用户表结构
    查看>>
    Oracle PLSQL Demo - 17.游标查询个别字段(非整表)
    查看>>
    【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy
    查看>>
    oracle rac 安装 PRVG-13606 ntp 同步报错解决过程
    查看>>
    Oracle RAC性能调整的方案
    查看>>
    oracle rac集群的东西之QQ聊天
    查看>>
    UML— 用例图
    查看>>
    Oracle Schema Objects——Tables——Table Compression
    查看>>
    oracle scott趣事
    查看>>
    oracle script
    查看>>
    Oracle select表要带双引号的原因
    查看>>
    Oracle SOA Suit Adapter
    查看>>
    Oracle Spatial GeoRaster 金字塔栅格存储
    查看>>
    Oracle spatial 周边查询SQL
    查看>>
    Oracle Spatial空间数据库建立
    查看>>
    UML— 活动图
    查看>>
    oracle sqlplus已停止工作,安装完成客户端后sqlplus报“段错误”
    查看>>
    oracle SQLserver 函数
    查看>>