母函数

来源:互联网 发布:httpresponse java 编辑:程序博客网 时间:2024/06/11 05:05

 

新版食物(shiwu

明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!

我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。

他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等

当然,他又有一些稀奇古怪的限制:

每种食物的限制如下:

      承德汉堡:偶数个

      可乐:0个或1

            鸡腿:0个,1个或2

            蜜桃多:奇数个

            鸡块:4的倍数个

            包子:0个,1个,2个或3

      土豆片炒肉:不超过一个。

            面包:3的倍数个

 

 

 

注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。

 

输入样例1

  1

输出样例1

  1

 

输入样例2

  5

输出样例2

  35

 数据范围

   对于40%的数据,1<=N<=100000;

   对于所有数据,1<=n<=10^500;

 

 

 

 

N<=10^500!!!!

显然算法复杂度不能和n有关.......

 

母函数,又称生成函数:http://baike.baidu.com/view/2177279.htm

对于这道题而言,没必要掌握太多的母函数知识。

 

首先这样定义。

对于g(x),它的母函数为f(x)=a0+a1*x^1+a2*x^2+a3*x^3............

a0,a1,a2..........分别为g(x)取0,1,2.....时的值(不严谨但是好懂的定义)

 

我们定义该题的函数:

汉堡:f=(1,0,1,0,1,0......)

         母函数为:h(x)=1+x^2+X^4+..........(当x为偶数时,有1种取法,否则没有取法,写成母函数就是这样)

                  =1/(1-X^2) (错位相减就可以了)

分别写出其他的母函数(咱就不写了)

 

然后由于所有的母函数乘起来,可以得到x/(1-X)^4 (约分很神奇)

这个式子有什么用?

根据卷积原理,它如果化成a0+a1*x^1+a2*x^2...........的形式,那么 x^N这一项前面的系数,就是该题的答案(优美的性质)

 

于是,一个核武器级公式就呼之欲出了:1/(1-x)^n=1+C(n,1)x^1+C(n+1,2)x^2+C(n+2,3)x^3+...+C(n+k-1,k)x^k+...

 

虽然分子不是1 ,但是仅仅只是把系数全部右移一格而已!

这样,我们就可以得到答案 C(N+2,3);

 

高精就行了。

 

     

 

原创粉丝点击