zoukankan      html  css  js  c++  java
  • 整数的拆分

    母函数将问题转换为关于母函数的某种代数问题甚至变成关于母函数的某种形式的运算,以整数拆分为例.

           所谓的整数拆分,即将正整数n分解成 若干正整数的和,不考虑其求和的顺序,一般假定$n = n_1 + n_2 + cdots + n_k, n_1 geq n_2 geq n_3 geq  cdots  geq n_k$,而且分解的形式不唯一,但有一定的限量.例如,n=2的拆分只有2=1+1,n=3则有1+2,1+1+1两种,n=4有1+1+1+1,1+1+2,1+3,2+2四种不同的拆分.

          正整数的拆分可以理解为将n个无区别的球,放入n个有区别的盒子,其每种方案就是一种拆分.

    例一      有1克、2克、3克、4克的砝码各一枚,问能称出多少种重量,并各有几种称法?

    这个问题可以看作将n拆分成1,2,3,4之和且不允许重复的拆分数,利用母函数计算如下:

    $(1+x)(1+x^2)(1+x^3)(1+x^4) \
    =(1 + x + x^2 + x^3)(1 + x^3 + x^4 + x^7) \
    =1 + x + x^2 + 2x^3 + 2x^4 + 2x^5 + 2x^6 + 2x^7 + x^8 + x^9 + x^{10}$

    $2x^3$表明称出3克的有2种方案,一种是1+2,一种是3,以此类推,超过10克的便无法称出.

    例二    求1角,2角,3角的邮票能贴出的邮资以及方案数,这个问题等价于将n分解成1,2,3的和,且允许重复的拆分数,因为邮票理论上是可以重复的.

    利用母函数:

    $(1+x + x^2 + cdots)(1+x^2 + x^4 + cdots)(1+x^3 + x^6 cdots) \
    = frac{1}{1-x}cdot frac{1}{1 - x^2}cdot frac{1}{1 - x^3} \
    = frac{1}{1-x-x^2 + x^4 + x^5 - x^6} \
    = 1 + x + 2x^2 + 3x^3 + 4x^4 + 5x^5 + 7x^6 + cdots$

    右端的级数是直接除的结果

    同理,若将$n$分解为$1,2,3, 4,cdots$之和,允许重复,其方案数${a_n}$序列的母函数为

    $$
    egin{aligned}
    G(x) & = (1+x + x^2 + cdots)1 + x^2 + x^4 + cdots)(1 + x^3 + x^6 + cdots)(1 + x^4 + x^8 + cdots) \
    &=prod _{i=1}^{infty}{(1 - x^i)}^{-1} \
    &= frac{1}{1-x}cdot frac{1}{1-x^2}cdot frac{1}{1-x^3}cdot frac{1}{1-x^4} cdots
    end{aligned}$$

  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/lfri/p/10463440.html
Copyright © 2011-2022 走看看