博客
关于我
【母函数初学,其他简便方法】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安装Oracle 11g和postgrepSQL数据库(附安装包)
    查看>>
    Linux安装pip没有权限,linux/unix没网环境下安装python、pip以及第三方库
    查看>>
    Linux安装postgresql及基础操作
    查看>>
    linux安装rabbitmq3.7.15教程
    查看>>
    Linux安装Redis 与 Redis基本语法
    查看>>
    Linux安装Redis及配置(超详细)
    查看>>
    Linux安装telnet - telnet不能用!提示:-bash: telnet: command not found
    查看>>
    Linux安装Tomcat
    查看>>
    Linux安装与配置SSH服务
    查看>>
    Linux安装卸载Mysql数据库
    查看>>
    linux安装卸载软件
    查看>>
    linux安装宋体
    查看>>
    LINUX安装源码软件经典三部曲
    查看>>
    linux安装目录
    查看>>
    Linux定时Job:crontab -e 与 /etc/crontab 的区别
    查看>>
    linux实用命令详解(新建删除复制文件夹,挂载) 转
    查看>>
    linux审计功能及规则 (audit.rule)
    查看>>
    Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式
    查看>>
    linux屏蔽ip端口号,linux 防火墙打开端口/屏蔽IP等
    查看>>
    Linux工作笔记022---查看Centos 内核版本号
    查看>>