新版食物(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);
高精就行了。