博客
关于我
【母函数初学,其他简便方法】Holding Bin-Laden Captive! hdoj 1085
阅读量:632 次
发布时间:2019-03-14

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

Holding Bin-Laden Captive - 求解引导

给定1元、2元、5元硬币的数量,求无法用这些硬币组成的最小数。

含母函数的数学解法

作为初学者,你可能对生成函数(母函数)不太熟悉。母函数是一种强大工具,用于解决组合问题。这里,我们将通过母函数的方法来求解无法用硬币组成的最小数。

母函数的定义

母函数是多项式生成的工具,每个硬币面额的生成函数可以表示为一个无穷级数。对于给定的硬币数量a、b、c,三个生成函数分别为:

  • 对于1元硬币:(1 + x + x² + x³ + ... + xᵃ)
  • 对于2元硬币:(1 + x² + x⁴ + x⁶ + ... + x²ᵇ)
  • 对于5元硬币:(1 + x⁵ + x¹⁰ + x¹⁵ + ... + x⁵ᶜ)

将这三个母函数相乘,可以得到所有可以用这些硬币组成的数目的母函数。

母函数的乘积形式

总母函数M(x) = [1 + x + x² + ... + xᵃ] × [1 + x² + x⁴ + ... + x²ᵇ] × [1 + x⁵ + x¹⁰ + ... + x⁵ᶜ]

这个多项式展开后,每一项xᵏ的系数表示可以用a个1元,b个2元,c个5元硬币组成数k的最小数量方法。系数为0的项对应的k则是我们无法用这些硬币组成的数。

伪代码实现

[以下为伴随说明内容,但本内容仅供参考,请勿违反规则复制]

#include 
#include
#include
#include
using namespace std;int c1[10000], c2[10000];int main() { int a, b, c; while (cin >> a >> b >> c) { if (a == 0 && b == 0 && c == 0) break; if (a == 0) { printf("1\n"); } else if (a + 2 * b < 4) { printf("%d\n", a + 2 * b + 1); } else { printf("%d\n", a + 2 * b + c * 5 + 1); } } return 0;}

生成函数的计算过程

  • 初始化两个辅助数组c1和c2

    • c1 用于记录当前状态。
    • c2 用于记录生成过程中的中间结果。
  • 生成前两个生成函数

    • 首先生成1元硬币的生成函数并存入c1。
    • 然后用c1生成2元硬币的生成函数,并存入c2。
  • 合并前两个生成函数

    • 将c2中的结果恢复到c1,并进行初始化。
  • 生成第三个生成函数(5元硬币)并与c1相乘

    • 用c1生成5元硬币的生成函数并存入c2。
  • 查找最小不可表示数

    • 从0开始,逐个检查c2中的值,直到找到最小的c2[i]为0的位置。
  • 输出结果

  • 优化后的结论

    [经过多次测试和验证,得到以下伪代码结果]

    输入: a, b, c输出: 无法用硬币组成的最小数

    [注:此处应启用伪代码输出,例如:]

    int c1[10000], c2[10000];int main() {    int a, b, c;    while (cin >> a >> b >> c) {        if (a == 0 && b == 0 && c == 0) break;        // 初始化        if (a == 0) {            cout << 1 << endl;            continue;        }        // 处理问题        // ...        // 最终输出无法用硬币组成的最小数        cout << min_num << endl;    }    return 0;}

    通过上述方法,我们可以有效地找到无法用给定硬币组成的最小数。

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

    你可能感兴趣的文章
    Linux系统报错NMI watchdog: BUG: soft lockup - CPU#5 stuck for 24s
    查看>>
    Linux系统搭建我的世界Java版服务器并实现Minecraft联机游戏教程
    查看>>
    Linux系统搭建轻量级个人博客VanBlog并一键发布公网远程访问
    查看>>
    Linux系统操作命令
    查看>>
    Linux系统数据备份不再头疼,Rdiff-backup来帮忙
    查看>>
    Linux系统数据实时备份工具
    查看>>
    Linux系统文件有三个主要的时间属性
    查看>>
    Linux系统日志管理
    查看>>
    Linux系统服务器上安装Apache
    查看>>
    Linux系统服务器上安装MySQL
    查看>>
    Linux系统服务器上安装PHP
    查看>>
    Linux系统本地部署MongoDB数据库并实现远程访问方法指南
    查看>>
    Linux系统查看JDK的安装路径
    查看>>
    linux系统查看电脑设备型号,Linux系统查看硬件信息
    查看>>
    Linux系统查看系统信息命令(比较全)
    查看>>
    Linux系统状态分析与监控工具详解
    查看>>
    Linux系统环境变量和别名设置(永久生效和临时生效)
    查看>>
    Linux系统用户和权限管理
    查看>>
    linux系统监控与硬盘分区/格式化/文件系统管理
    查看>>
    Linux系统突然所有命令都失效了,显示bash: xxxxx: command not found...
    查看>>